एक SQL सर्वर निष्पादन योजना आपके प्रश्नों के साथ प्रदर्शन समस्याओं की जाँच के लिए उपयोगी है। डेटाबेस पेशेवरों को अक्सर परेशानी टिकट या उपयोगकर्ता शिकायतें प्राप्त होती हैं कि प्रश्न धीरे-धीरे चल रहे हैं। जिन क्वेरी परिणामों में दो या तीन मिनट लगते थे, उन्हें अचानक 30 मिनट से अधिक की आवश्यकता होती है। समस्या निवारण के लिए सर्वर संसाधन (सीपीयू, मेमोरी), आंकड़े, डिस्क प्रदर्शन, अवरोधन, गतिरोध और अनुक्रमणिका जैसे जांच क्षेत्रों की आवश्यकता हो सकती है। इस लेख में, हम प्रदर्शन समस्याओं को हल करने में SQL सर्वर निष्पादन योजना की भूमिका पर ध्यान केंद्रित करेंगे।
SQL सर्वर में T-SQL सबमिट करने के बाद क्या होता है?
आइए देखें कि जब आप SQL सर्वर में Transact-SQL, या T-SQL का उपयोग करके कोई क्वेरी सबमिट करते हैं तो क्या होता है। उपयोगकर्ताओं के लिए, निश्चित रूप से, इससे कोई फर्क नहीं पड़ता। उपयोगकर्ता सटीक परिणाम प्राप्त करने की अपेक्षा करते हैं, चाहे डेटाबेस की क्वेरी कर रहे हों या वेब पर खोज कर रहे हों।
SQL क्वेरी का उच्च-स्तरीय वर्कफ़्लो
- उपयोगकर्ता क्लाइंट एप्लिकेशन में SQL सर्वर को प्रमाणित करता है और एक क्वेरी सबमिट करता है।
- SQL सर्वर क्वेरी को पार्स करता है और किसी भी सिंटैक्स त्रुटि की जांच करता है।
- पार्स ट्री को आगे बीजगणित में संसाधित किया जाता है, जो क्वेरी में सभी वस्तुओं, तालिकाओं और स्तंभों को हल करता है। यह कॉलम डेटा प्रकारों की जांच भी करता है। किसी भी समस्या के मामले में, यह एक त्रुटि देता है। बीजगणित एक क्वेरी प्रक्रिया ट्री और एक क्वेरी हैश उत्पन्न करता है। यदि निष्पादन योजना पहले से मौजूद है, तो SQL सर्वर उस कैश्ड योजना का उपयोग करता है और क्वेरी निष्पादित करता है।
- यदि कोई योजना मौजूद नहीं है या योजना अप्रचलित है, तो क्वेरी ऑप्टिमाइज़र आंकड़ों, क्वेरी प्रक्रिया ट्री और बाधाओं की सहायता से पूर्ण लागत-आधारित अनुकूलन करता है। उन इनपुट के आधार पर, यह लागत-अनुकूलित SQL सर्वर निष्पादन योजना तैयार करता है।
- अंत में, SQL सर्वर क्वेरी इंजन निष्पादन योजना के अनुसार क्वेरी को निष्पादित करता है और परिणाम देता है।
SQL सर्वर निष्पादन योजना का अवलोकन
SQL सर्वर निष्पादन योजना डेटाबेस पेशेवरों को क्वेरी प्रदर्शन के समस्या निवारण और कुशल क्वेरी लिखने में मदद करती है। जब किसी क्वेरी को चलने में लंबा समय लगता है, तो SQL सर्वर निष्पादन योजना आपको उस बिंदु की पहचान करने में मदद कर सकती है जिस पर क्वेरी सबसे अधिक संसाधन और समय ले रही है।
निष्पादन योजना तैयार करने के लिए आप निम्न में से किसी का भी उपयोग कर सकते हैं:
- एसक्यूएल सर्वर प्रबंधन स्टूडियो
- Azure Data Studio
- एसक्यूएल सर्वर प्रोफाइलर
- विस्तारित ईवेंट
- गतिशील प्रबंधन दृश्य
- तृतीय-पक्ष डेटाबेस निगरानी सॉफ़्टवेयर
# 1 से # 5 द्वारा उत्पन्न निष्पादन योजनाएं समान हैं। तृतीय-पक्ष डेटाबेस निगरानी सॉफ़्टवेयर (#6) अतिरिक्त कार्य प्रदान करता है जो महंगे ऑपरेटरों की पहचान करने के लिए रंग कोडिंग का उपयोग करते हैं।
SQL सर्वर अनुमानित और वास्तविक निष्पादन योजनाएँ प्रदान करता है, जैसा कि आप अपनी कार की मरम्मत के लिए अनुभव करते हैं। एक मैकेनिक आपके वाहन का निरीक्षण करता है, फिर आपको अपनी आवश्यकताओं, वाहन की स्थिति और मैकेनिक को लगता है कि मरम्मत में लगने वाले अनुमानित समय और सामग्री के आधार पर काम का अनुमान प्राप्त होता है। बेशक, वास्तविक लागत और समय भिन्न हो सकता है, जैसा कि अनुमानित और वास्तविक SQL सर्वर निष्पादन योजनाओं के साथ होता है।
अनुमानित निष्पादन योजनाएं
क्वेरी निष्पादित किए बिना, आप SQL सर्वर आंकड़ों के आधार पर अनुमानित (तार्किक) SQL सर्वर निष्पादन योजना प्राप्त कर सकते हैं। SQL सर्वर प्रबंधन स्टूडियो (SSMS) में इन चरणों का पालन करें:
- क्वेरी को हाइलाइट करें (यदि आप किसी विशिष्ट क्वेरी के लिए निष्पादन योजना चाहते हैं)।
- अनुमानित निष्पादन योजना प्रदर्शित करें बटन पर क्लिक करें (कीबोर्ड शॉर्टकट Ctrl + L), जैसा कि नीचे दिखाया गया है।
कभी-कभी SQL सर्वर अनुमानित योजना तैयार करने में असमर्थ होता है; उदाहरण के लिए, यदि किसी पैरामीटर का उपयोग क्वेरी में उसके मान को निर्दिष्ट किए बिना किया जाता है, या यदि कोई अस्थायी तालिका घोषित नहीं की जाती है।
वास्तविक निष्पादन योजना
एक बार जब आप SQL सर्वर को क्वेरी सबमिट कर देते हैं, तो आप एक वास्तविक निष्पादन योजना प्राप्त कर सकते हैं जो क्वेरी को निष्पादित करने के लिए SQL सर्वर द्वारा उठाए गए चरणों का प्रतिनिधित्व करती है। जैसा कि वाहन की मरम्मत के परिदृश्य में होता है, यह आपको प्राप्त होने वाले वास्तविक बिल जैसा होता है।
वास्तविक निष्पादन योजना प्राप्त करने के लिए, क्वेरी चलाने से पहले SSMS में नीचे दिए गए चरणों का पालन करें।
- क्वेरी हाइलाइट करें।
- वास्तविक निष्पादन योजना प्रदर्शित करें पर क्लिक करें बटन (कीबोर्ड शॉर्टकट Ctrl + M ), जैसा कि ऊपर दिखाया गया है।
SQL सर्वर निष्पादन योजना प्रारूप
डिफ़ॉल्ट रूप से, ऊपर बताई गई SSMS प्रक्रियाएँ ग्राफ़िकल प्रारूप में SQL सर्वर निष्पादन योजना उत्पन्न करती हैं। लेकिन आपके पास निष्पादन योजनाओं को तीन अलग-अलग स्वरूपों में देखने का विकल्प है:
- ग्राफ़िकल
- एक्सएमएल
- पाठ
आइए उनमें से प्रत्येक प्रारूप को देखें।
<एच3>1. ग्राफिकल निष्पादन योजनाचित्रमय योजना डेटा प्रवाह सहित सभी घटकों को दर्शाती है, जैसा कि नीचे दिखाया गया है।
ऑपरेटर
ऑपरेटरों को आइकन के रूप में प्रदर्शित किया जाता है। प्रत्येक ऑपरेटर को एक विशिष्ट कार्य करने के लिए नामित किया जाता है। उदाहरण के लिए, SQL सर्वर में क्वेरी ऑप्टिमाइज़र एक टेबल स्कैन, एक इंडेक्स स्कैन और एक खोज कर सकता है। [AdventureWorks2019] पर एक इंडेक्स से डेटा खींचते समय क्लस्टर इंडेक्स सीक ऑपरेटर इस तरह दिखता है।[HumanResources] टेबल:
प्रतिशत लागत
ग्राफिकल प्लान एक प्रतिशत लागत भी दिखाता है - यहां, क्लस्टर इंडेक्स की तलाश के लिए 99% - ऑपरेटर से जुड़ा हुआ है। यह लागत क्वेरी को क्रियान्वित करने में उपयोग किए जाने वाले अन्य ऑपरेटरों के सापेक्ष है।
डेटा प्रवाह तीर
तीर ऑपरेटरों को जोड़ते हैं, उनकी चौड़ाई एक ऑपरेटर से दूसरे में जाने वाले डेटा की पंक्तियों की संख्या को दर्शाती है।
उदाहरण के लिए, मान लें कि आपकी क्वेरी आउटपुट की केवल एक पंक्ति उत्पन्न करती है, लेकिन इसे पूरा होने में लंबा समय लगता है। निष्पादन योजना में माउस को डेटा प्रवाह तीर पर ले जाने पर, आप पाते हैं कि पढ़ी गई पंक्तियों की संख्या लाखों में है। यह संसाधन उपयोग में भारी असंतुलन का प्रतिनिधित्व करता है और अनुकूलन की आवश्यकता वाले क्षेत्र को प्रकट करता है।
टूलटिप्स
जैसा कि नीचे दिखाया गया है, जब आप किसी ऑपरेटर पर माउस ले जाते हैं, तो डेटा प्रवाह पर अधिक आंकड़ों के साथ टूलटिप्स दिखाई देते हैं।
गुण विंडो
गुण विंडो ऑपरेटरों और उनके घटकों के बारे में विस्तृत जानकारी प्रदर्शित करती है। यह टूलटिप्स का सुपरसेट है।
<एच3>2. XML-स्वरूपित SQL सर्वर निष्पादन योजना
एक्सएमएल निष्पादन योजना एक विशिष्ट, संरचित प्रारूप में है। हालांकि एक्सएमएल प्रारूप कम दृष्टि से सहज है, यह एक्सएमएल में सभी विवरण रखता है और गुणों और टूलटिप्स को देखने के लिए अतिरिक्त चरणों की आवश्यकता नहीं होती है। आप आसानी से XML फॉर्मेट को ग्राफिकल फॉर्मेट में और इसके विपरीत कन्वर्ट कर सकते हैं।
ग्राफ़िकल निष्पादन योजना को XML स्वरूप में बदलने के लिए, उस पर राइट-क्लिक करें और निष्पादन योजना XML दिखाएं चुनें , जैसा कि नीचे दिखाया गया है।
परिणाम निम्न संरचित, XML-स्वरूपित निष्पादन योजना है।
निम्न आदेश भी XML स्वरूप में निष्पादन योजना उत्पन्न करते हैं:
- अनुमानित योजना के लिए:SHOWPLAN_XML चालू करें
- वास्तविक योजना के लिए: STATISTICS_XML चालू करें
आप कई तरीकों से निष्पादन योजना तैयार कर सकते हैं:
- SHOWPLAN_TEXT चालू करें
यह आदेश अनुमानित . उत्पन्न करता है निष्पादन योजना, बिना क्वेरी निष्पादन पर विस्तृत जानकारी। यह sqlcmd उपयोगिता जैसे अनुप्रयोगों के लिए अभिप्रेत है।
- SHOWPLAN_ALL चालू करें
यह आदेश अनुमानित . उत्पन्न करता है निष्पादन योजना, साथ सारणीबद्ध प्रारूप में सभी ऑपरेटरों और संचालन के बारे में विस्तृत जानकारी।
- सांख्यिकी प्रोफ़ाइल सेट करें
यह आदेश एक वास्तविक निष्पादन योजना तैयार करता है, क्वेरी निष्पादन के बाद, सारणीबद्ध प्रारूप में।
अनुमानित और वास्तविक SQL सर्वर निष्पादन योजनाएं भिन्न क्यों हैं?
अनुमानित और वास्तविक निष्पादन योजनाएं आम तौर पर समान होती हैं, हालांकि कुछ परिस्थितियों के कारण उनमें अंतर हो सकता है।
पुराने आंकड़े
अनुमानित और वास्तविक निष्पादन योजनाओं के बीच अंतर का प्राथमिक कारण पुराने आंकड़े हैं।
क्वेरी ऑप्टिमाइज़र लागत प्रभावी और अनुकूलित क्वेरी निष्पादन योजना बनाने के लिए आँकड़ों का उपयोग करता है। यदि आपके आँकड़े अपडेट नहीं किए गए हैं, या यदि आपका डेटा नमूनाकरण उपयुक्त नहीं है, तो क्वेरी ऑप्टिमाइज़र एक पूर्ण अनुकूलन करेगा और पुरानी जानकारी के आधार पर एक निष्पादन योजना तैयार करेगा। आप एक अक्षम निष्पादन योजना भी प्राप्त कर सकते हैं जिससे क्वेरी प्रदर्शन संबंधी समस्याएं हो सकती हैं।
पुराने आंकड़े कभी-कभी तब होते हैं जब डेटा बार-बार बदलता है और आंकड़े इंडेक्स रखरखाव के अनुसार अपडेट नहीं होते हैं।
सीरियल या समानांतर SQL सर्वर निष्पादन योजना
संकलन समय पर, क्वेरी ऑप्टिमाइज़र एक निष्पादन योजना बनाता है और क्वेरी लागत और समानांतरवाद की लागत सीमा के आधार पर एक सीरियल या समानांतर योजना तैयार करता है। जबकि निष्पादन योजना सीरियल और समानांतर मोड दोनों के लिए समान हो सकती है, SQL सर्वर सर्वर संसाधनों और गतिविधि के आधार पर उनके बीच निर्णय लेता है।
अमान्य अनुमान
जैसा कि पहले उल्लेख किया गया है, बीजगणित SQL क्वेरी को निष्पादित करने से पहले वस्तुओं के नामों को बांधता है। मान लीजिए कि आप निर्दिष्ट करते हैं कि परीक्षण नाम की एक तालिका रनटाइम पर बनाई जाएगी, तो एक अनुमानित निष्पादन योजना तैयार करने का प्रयास करें। क्योंकि वह तालिका मौजूद नहीं है, आपको एक त्रुटि संदेश प्राप्त होगा, जैसा कि नीचे दिखाया गया है।
निष्पादन योजना का उपयोग करना
संक्षेप में, आप ग्राफिकल, एक्सएमएल और टेक्स्ट प्रारूपों में एक SQL सर्वर निष्पादन योजना तैयार कर सकते हैं और इसका उपयोग अपने डेटाबेस प्रदर्शन समस्याओं को हल करने में सहायता के लिए कर सकते हैं।
क्वेरी निष्पादन योजनाएं क्वेरी वर्कफ़्लो, ऑपरेटरों और घटकों की पहचान करने के प्राथमिक चरण हैं ताकि आप किसी भी संभावित सुधार के लिए अपने प्रश्नों को ट्यून कर सकें। निष्पादन योजनाओं का उपयोग करने के बारे में अधिक जानकारी के लिए, हमारी पोस्ट देखें:निष्पादन योजनाओं को कैसे पढ़ें और उनका विश्लेषण करें।