निष्पादन योजना का नोटिस लेने के लिए क्वेरी या SQL सर्वर डेटाबेस कोड (प्रक्रिया और विचार) लिखते समय इसे हमेशा प्रोत्साहित किया जाता है। इसके अनेक कारण हैं। सबसे पहले - अनुकूलक एक ऐसी योजना का चयन कर सकता है जिसकी आप अपेक्षा नहीं कर रहे हैं। उदाहरण के लिए, एक छोटी तालिका से मिलान करने से पहले सूचकांक एक बड़ी तालिका को स्कैन करता है। दूसरा - इस बात पर विचार किया जाना चाहिए कि यह प्रश्न आने वाले महीनों या वर्षों में कैसा प्रदर्शन करेगा यदि प्रश्न छोटे तालिकाओं के साथ एक नई प्रणाली में चल रहे हैं जो बढ़ेंगे। और अंत में लेकिन सबसे महत्वपूर्ण बात यह है कि यह क्वेरी कितनी तेज़ है और यह कितने संसाधनों का उपयोग करती है। अंतिम बिंदु शायद उतना महत्वपूर्ण न लगे, आप सोच रहे होंगे कि इसमें 3 सेकंड से भी कम समय लगता है जो काफी अच्छा है, लेकिन अगर यह <1 सेकंड में चल सकता है तो क्या यह बेहतर नहीं होगा? यदि आपके डेटाबेस क्लाउड-होस्टेड हैं, तो संसाधनों को कम करने से आपके पैसे भी बच सकते हैं।
SQL ऑप्टिमाइज़ेशन के लिए बहुत सारे मामले आम तौर पर एक ऐसे मुद्दे से आते हैं जो एंड-यूज़र या आपके मॉनिटरिंग सॉफ़्टवेयर द्वारा पता लगाया जाता है। "इस रिपोर्ट को उत्पन्न होने में 30 मिनट क्यों लग रहे हैं?", "I/O प्रतीक्षा में उस स्पाइक का क्या कारण है" या "इन नौकरियों को पिछले साल की तुलना में दोगुना समय क्यों लग रहा है?"
इन सभी परिदृश्यों में यह अभी भी निष्पादन योजनाओं के बारे में कुछ ज्ञान और स्थिति को सुधारने के लिए SQL को ठीक करने का सबसे अच्छा तरीका है और यह बहुत समय लेने वाला हो सकता है और हमेशा सफल नहीं होता है।
आइए एक उदाहरण लेते हैं। तो, आप एक नई क्वेरी लिख रहे हैं, उसे क्रियान्वित कर रहे हैं, और फिर सोच रहे हैं, ओह डियर इसमें बहुत समय लग रहा है।
730 पंक्तियों के लिए 17 सेकंड, मुझे क्या करना चाहिए?
सबसे पहले, निष्पादन योजना की समीक्षा करें:
यह हमेशा सीधे आगे नहीं होता है यदि आपको इसे समझने के लिए ज़ूम इन और आउट करना पड़ता है। इसलिए, पहली सलाह यह है कि स्पॉटलाइट ट्यूनिंग पैक के साथ एक अच्छा प्लान व्यूअर प्राप्त किया जाए।
प्लान व्यूअर हमारे लिए आवश्यक जानकारी के प्रमुख अंशों को हाइलाइट करता है और जहां मुख्य ऑपरेशन होते हैं और साथ ही किसी भी चेतावनियों को हाइलाइट करते हैं।
यहां एक उदाहरण दिया गया है:
तो, इस कोड में एक समस्या है, लेकिन हम इसके बारे में क्या कर सकते हैं?
खैर, वास्तव में बहुत कुछ। हम क्वेरी संकेतों का उपयोग कर सकते हैं, कुछ इंडेक्स जोड़ने पर विचार करें (यह मत भूलना कि यह अन्य प्रश्नों और डीएमएल को प्रभावित कर सकता है), कोड के बिट्स जोड़ना जो परिणाम सेट को नहीं बदलते हैं लेकिन एक अलग योजना और छोटी चाल उत्पन्न करने के लिए अनुकूलक को प्रभावित करते हैं ऑप्टिमाइज़र को किसी विशेष इंडेक्स का उपयोग करने पर विचार करना बंद कर दें और शायद एक नई योजना तैयार करें। लेकिन यह सब परीक्षण और त्रुटि है और इसे मैन्युअल रूप से करने में बहुत समय लगता है।
SSMS में स्पॉटलाइट एक्सटेंशन एप्लिकेशन जोड़कर और स्पॉटलाइट ट्यूनिंग पैक की सदस्यता लेकर हम ट्यूनिंग पैक में अनुकूलन सुविधा को हमारे लिए पूरी मेहनत करने दे सकते हैं।
आपने पहले स्क्रीनशॉट में देखा होगा कि जब सुविधा सक्षम होती है, तो यह स्वतः ही पता लगा लेती है कि अनुकूलन संभव है:
विश्लेषण देखें पर क्लिक करें
फिर आप ऑप्टिमाइज़ बटन पर क्लिक कर सकते हैं और ऑप्टिमाइज़र इंजन कोड का विश्लेषण करेगा और फिर से लिखने के नियमों को लागू करना शुरू कर देगा जो SQL के सिंटैक्स को बदल देगा जो विकल्प प्रदान करते हैं जो समान परिणाम सेट प्रदान करते हैं, और फिर उनका परीक्षण करें ताकि हम देख सकें कि कोई वैकल्पिक निष्पादन है या नहीं योजनाएं तेज हैं और क्यों। नियम संयोजनों में लागू होते हैं इसलिए संभावित विकल्प 100 से अधिक हो सकते हैं। हालांकि, टूल आपको केवल वही विकल्प दिखाता है जो मूल से तेज़ हैं।
यदि आप इसे मैन्युअल रूप से करने का प्रयास करते हैं तो यह प्रक्रिया पृष्ठभूमि में चलती है और आपका बहुत अधिक समय बचाती है।
और जब परिणाम दिखाए जाते हैं तो आप विकल्पों की तुलना कर सकते हैं, कोड अंतर देख सकते हैं, योजनाओं की तुलना कर सकते हैं और आंकड़ों की समीक्षा कर सकते हैं।
तो, मेरी क्वेरी के नए संस्करण के साथ SSMS पर वापस जाएँ और उसका परीक्षण करें।
सफलता।
यदि यह विकास के माहौल में है, तो आप सर्वर को शट डाउन और पुनरारंभ किए बिना कोल्ड बफर कैश के साथ अपने प्रश्नों का परीक्षण करने के लिए DBCC DROPCLEANBUFFERS का उपयोग करके बफर कैश को फ्लश करने पर विचार कर सकते हैं।
साथ ही, क्वेरी सिंटैक्स में अंतर क्यों आया, इस बारे में अधिक जानकारी के लिए क्वेरी में SET STATISTICS IO ON जोड़ने पर विचार करें:
मूल:
फिर से लिखें:
और इसे ट्यूनिंग पैक में आँकड़ों की तुलना सुविधा के साथ भी प्राप्त किया जा सकता है:
तो, सफल परिवर्तन और खुश अंत-उपयोगकर्ता के साथ, अगली क्वेरी पर। व्यक्तिगत प्रश्नों के प्रदर्शन में लगातार सुधार करके, हम उदाहरण के प्रदर्शन में सुधार करते हैं।