Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

कैसे निर्धारित करें कि SQL सर्वर में क्या संकलन किया जा रहा है

जब मुझे पूर्व में योजना कैशिंग/अत्यधिक क्वेरी पुनर्संकलन के मुद्दों पर गौर करना पड़ा, तो मैंने Microsoft श्वेतपत्र 'SQL Server 2008 में कैशिंग की योजना बनाएं' और मैं दृढ़ता से यह पढ़ने का सुझाव दूंगा कि क्योंकि इसमें योजना कैशिंग, क्वेरी योजना पुन:उपयोग, पुनर्संकलन के कारण, पुनर्संकलन की पहचान करना और अन्य संबंधित विषय शामिल हैं।

इसके साथ ही, एसक्यूएल सर्वर प्रोफाइलर (माइक्रोसॉफ्ट एसक्यूएल सर्वर 2008 के तहत स्थित होना चाहिए -> प्रदर्शन उपकरण यदि आपने इसे अपने क्लाइंट टूल्स इंस्टॉलेशन के हिस्से के रूप में स्थापित किया है) सीधे क्वेरी संकलन से संबंधित तीन घटनाओं को उजागर करता है जो आपके लिए मददगार हो सकते हैं:

  • कर्सर
    • कर्सर रीकंपाइल
  • प्रदर्शन
    • शोप्लान एक्सएमएल फॉर क्वेरी कंपाइल
  • संग्रहीत प्रक्रिया
    • एसपी:पुनः संकलित करें

आप संग्रहीत कार्यविधियों का उपयोग कर रहे हैं, इसलिए संभव है कि आपको केवल एसपी:पुनः संकलित करें प्रतिस्पर्धा। यह घटना किसी भी समय एक संग्रहीत प्रक्रिया, ट्रिगर या उपयोगकर्ता परिभाषित फ़ंक्शन को पुन:संकलित करने पर सक्रिय हो जाएगी। टेक्स्टडाटा कॉलम tsql स्टेटमेंट का टेक्स्ट दिखाएगा जिसके कारण स्टेटमेंट रीकंपाइलेशन हुआ और EventSubClass कॉलम एक कोड दिखाएगा जो रीकंपाइलेशन का कारण बताता है।

SP के लिए EventSubClass कोड:SQL 2008 में पुन:संकलित करें

  • 1 =स्कीमा परिवर्तित
  • 2 =आंकड़े बदल गए हैं
  • 3 =डीएनआर पुन:संकलित करें
  • 4 =सेट विकल्प बदला गया
  • 5 =अस्थायी तालिका बदली गई
  • 6 =रिमोट रोसेट बदला गया
  • 7 =ब्राउज़ करने के लिए अनुमतियां बदली गईं
  • 8 =क्वेरी सूचना परिवेश परिवर्तित
  • 9 =MPI दृश्य परिवर्तित
  • 10 =कर्सर विकल्प परिवर्तित
  • 11 =पुन:संकलन विकल्प के साथ

यदि आप निम्नलिखित 5 घटनाओं की निगरानी करते हैं तो आप देख पाएंगे कि SQL सर्वर पर कौन सी संग्रहीत कार्यविधियाँ और कथन लागू किए जा रहे हैं और कौन से पुन:संकलन को ट्रिगर कर रहे हैं:

  • स्टोर प्रक्रियाएं
    • एसपी:प्रारंभ
    • SP:StmtStarting
    • एसपी:पुनः संकलित करें
    • एसपी:पूर्ण
  • प्रदर्शन
    • ऑटो आँकड़े

मैं आमतौर पर उन घटनाओं के लिए सभी कॉलम कैप्चर करने के लिए प्रोफाइलर ट्रेस भी सेट करता हूं। मैं कहूंगा कि उन 5 घटनाओं के साथ एक ट्रेस सेट करें, 30 से 60 सेकेंड के लिए ट्रेस चलाएं और फिर इसे रोकें और फिर आपके पास पुन:संकलन करने का एक अच्छा स्नैपशॉट होना चाहिए।

यदि बहुत अधिक शोर है, तो आप घटनाओं को फ़िल्टर करने के लिए ट्रेस गुणों में कॉलम फ़िल्टर जोड़ना शुरू कर सकते हैं। उदाहरण के लिए यदि आप पाते हैं कि आपके अधिकांश पुनर्संकलन केवल एक बार डेटाबेस पर हो रहे हैं, तो डेटाबेस आईडी या डेटाबेसनाम कॉलम पर एक कॉलम फ़िल्टर सेट करें ताकि उस डेटाबेस के विरुद्ध चलने वाली क्वेरी आपके ट्रेस में शामिल हो जाएं।

फिर उन पैटर्नों की तलाश शुरू करें जिनमें प्रश्नों को फिर से संकलित किया जा रहा है और माइक्रोसॉफ्ट से श्वेतपत्र का उपयोग एक गाइड के रूप में करें कि वे पुन:संकलन को ट्रिगर क्यों कर रहे हैं।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. एक ही सर्वर पर एकाधिक डेटाबेस में क्वेरी

  2. डोमेन\उपयोगकर्ता के लिए सिंटैक्स प्रदान करें

  3. SQL सर्वर व्यू में प्रोग्रामेटिक रूप से ODBC लिंक्ड टेबल कैसे बनाएं और क्या यह संपादन योग्य है?

  4. JDBC के माध्यम से एक Linux मशीन से Windows प्रमाणीकरण के साथ SQL सर्वर से कनेक्ट करें

  5. संग्रहीत कार्यविधि में किसी पैरामीटर को अनदेखा कैसे करें यदि उसका मान शून्य है