क्वेरी प्रदर्शन ट्यूनिंग


12

जब आप कोई क्वेरी / संग्रहित खरीद / फ़ंक्शन लिखते हैं, तो कुछ प्रदर्शन मापदंडों को जल्दी से प्राप्त करने के लिए सबसे जानकारीपूर्ण तरीका क्या है? क्या आप क्वेरी चलाते हैं और वास्तविक निष्पादन योजना देखते हैं? यदि हां, तो आप किन चीजों की तलाश कर रहे हैं? जाहिर है टेबल / इंडेक्स स्कैन थोड़े हिट हैं, लेकिन और क्या?

जवाबों:


8

त्वरित मूल्यांकन के लिए, SSMS से बाहर और प्लान एक्सप्लोरर में निष्पादन योजना प्राप्त करें

  • कुछ भी अप्रत्याशित के लिए सबसे महंगे संचालन की समीक्षा करें। शॉर्ट्स, वर्कटेबल्स, अनुचित रूप से जुड़ने वाले ऑपरेटर (जैसे नेस्टेड लूप जहां आप मर्ज या हैश की उम्मीद करते हैं)।
  • योजना के प्रत्येक चरण में पंक्ति को देखें, क्या वे मोटे तौर पर उस सीमा के भीतर हैं जिसे आप देखने की उम्मीद करते हैं?
  • अनुमानित बनाम वास्तविक पंक्तियों को देखें। यदि आप वास्तविक अनुमानों के करीब हैं, तो यह अधिक संभावना है कि आपके पास एक अच्छी योजना है। यदि बड़े बदलाव हैं, तो पता करें कि क्यों (उदाहरण के लिए लापता और / या तारीख के आंकड़े)।
  • पैरामीटर सूँघने के मुद्दों की क्षमता का मूल्यांकन करें। उन क्षेत्रों की तलाश करें जहां कार्डिनैलिटी भिन्न हो सकती है और इनपुट मापदंडों की एक श्रृंखला के खिलाफ परीक्षण कर सकती है।

स्वतंत्र रूप से उपलब्ध संदर्भ सामग्री के बहुत सारे, ग्रांट फिचली का SQL सर्वर निष्पादन योजना एक अच्छी शुरुआत है। मुझे यह भी पता चला कि जो चांग के ब्लॉग पोस्ट और निष्पादन योजना की लागत पर ईबुक बहुत उपयोगी है।


5

अधिकतर, मैं जो कुछ भी करता हूं वह केवल क्वेरी चलाता है और यह पता करता है कि यह वास्तविक दुनिया डेटा के खिलाफ कैसे निष्पादित करता है। यदि कोई समस्या है, तो मैं निष्पादन योजनाओं पर एक नज़र डालता हूं।

निष्पादन योजनाओं के रूप में, ब्रैड मैक्गी ने इस विषय पर एक दिलचस्प लेख लिखा है

इसमें वह कहता है:

यदि आपको निष्पादन योजना में निम्नलिखित में से कोई भी दिखाई देता है, तो आपको उन्हें चेतावनी के संकेतों पर विचार करना चाहिए और संभावित प्रदर्शन समस्याओं के लिए उनकी जांच करनी चाहिए। उनमें से प्रत्येक प्रदर्शन के दृष्टिकोण से आदर्श से कम हैं।

* Index or table scans: May indicate a need for better or additional indexes.

* Bookmark Lookups: Consider changing the current clustered index, consider using a covering index, limit the number of columns in the SELECT statement.

* Filter: Remove any functions in the WHERE clause, dont include wiews[sic] in your Transact-SQL code, may need additional indexes.

* Sort: Does the data really need to be sorted? Can an index be used to avoid sorting? Can sorting be done at the client more efficiently? 

इनसे बचना हमेशा संभव नहीं होता है, लेकिन जितना अधिक आप इनसे बच सकते हैं, उतना तेज प्रदर्शन होगा।


0
SET STATISTICS IO ON

आम तौर पर, "तार्किक रीड्स की संख्या" यथासंभव कम होनी चाहिए। क्वेरी को पूरा करने के लिए कुछ पृष्ठों को छुआ गया, बेहतर योजना (आमतौर पर) तेज होगी, सीपीयू, रैम और डिस्क आईओ पर कम प्रभाव।

यह आपको गाइड करेगा जब एसक्यूएल के इंडेक्स या री-फैक्टरिंग को बदलना वास्तव में मदद कर रहा है। "मिलीसेकंड एक्ससेन्शन टाइम" को देखते हुए समान एसक्यूएल और क्वेरी प्लान के साथ भी भिन्नता होगी - तार्किक रीड किसी भी दिए गए क्वेरी प्लान के अनुरूप रहेंगे।

इसके अलावा "शारीरिक रीड्स" बहुत कम होना चाहिए (और शून्य होना चाहिए और बाद के निष्पादन के लिए शून्य रहना चाहिए)। यदि यह ऐसा नहीं करता है तो अपने SQL सर्वर मेमोरी उपयोग (पेज लाइफ आदि) को देखें।


लेकिन क्वेरी में कैश में नहीं होने पर चलने वाले प्रश्नों के लिए भौतिक रीड शून्य, सही से अधिक होगा? मेरा मतलब है, आप हमेशा उस के आसपास नहीं पहुंच सकते हैं, क्योंकि सभी प्रश्न (विशेष रूप से तदर्थ प्रश्न) कैश नहीं हैं। क्या मैं सही हूँ?
थॉमस स्ट्रिंगर

@ Surfer513 डेटा कैशिंग की देखभाल करने के लिए, आप बफर पूल (डेटा कैश) को खाली करने के लिए DBCC DROPCLEANBUFFERS द्वारा पीछा किया गया एक चेक जारी कर सकते हैं। ध्यान दें कि यह हर किसी के लिए बफ़र्स को साफ कर देगा, इसलिए इसे तदनुसार (परीक्षण प्रणालियों पर) उपयोग करें।
स्टेनलीजॉन

@StanleyJohns, आप डेटा / क्वेरी कैश क्यों साफ़ करना चाहेंगे?
थॉमस स्ट्रिंगर

इस तरह से भौतिक आईओ प्रत्येक बार एक ही होगा, जिससे परीक्षण के लिए आवश्यक स्थिरता मिलेगी। इससे क्वेरी को ठीक करने में मदद मिलेगी।
स्टेनलीजॉन

मैं भौतिक IO आँकड़ों को अनदेखा करूँगा क्योंकि यह अंतर्निहित बुनियादी ढांचे के नियंत्रण में है और इसमें SAN और OS बफरिंग शामिल होगी। लॉजिकल आईओ एसक्यूएल स्टेटमेंट में काम करने की राशि का एक उपाय है। यदि SQL कम तार्किक IO करता है तो यह कम काम करता है।
लड़के
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.