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

मैं SQL सर्वर में क्वेरी निष्पादन योजना कैसे प्राप्त करूं?

निष्पादन योजना प्राप्त करने के कई तरीके हैं, जिनका उपयोग करना आपकी परिस्थितियों पर निर्भर करेगा। आम तौर पर आप एक योजना प्राप्त करने के लिए SQL सर्वर प्रबंधन स्टूडियो का उपयोग कर सकते हैं, हालांकि यदि किसी कारण से आप SQL सर्वर प्रबंधन स्टूडियो में अपनी क्वेरी नहीं चला सकते हैं तो आपको SQL सर्वर प्रोफाइलर के माध्यम से या निरीक्षण करके योजना प्राप्त करने में सक्षम होने में मदद मिल सकती है। योजना कैश।

विधि 1 - SQL सर्वर प्रबंधन स्टूडियो का उपयोग करना

SQL सर्वर कुछ साफ-सुथरी विशेषताओं के साथ आता है जो एक निष्पादन योजना को कैप्चर करना बहुत आसान बनाता है, बस यह सुनिश्चित करें कि "वास्तविक निष्पादन योजना शामिल करें" मेनू आइटम ("क्वेरी" मेनू के तहत पाया गया) को टिक किया गया है और अपनी क्वेरी को सामान्य रूप से चलाएं ।

यदि आप संग्रहीत कार्यविधि में कथनों के लिए निष्पादन योजना प्राप्त करने का प्रयास कर रहे हैं तो आपको संग्रहीत कार्यविधि को निष्पादित करना चाहिए, जैसे:

exec p_Example 42

जब आपकी क्वेरी पूरी हो जाती है तो आपको परिणाम फलक में "निष्पादन योजना" नामक एक अतिरिक्त टैब दिखाई देना चाहिए। यदि आपने कई स्टेटमेंट चलाए हैं तो आप इस टैब में कई प्लान प्रदर्शित होते हुए देख सकते हैं।

यहां से आप SQL सर्वर प्रबंधन स्टूडियो में निष्पादन योजना का निरीक्षण कर सकते हैं, या योजना पर राइट क्लिक कर सकते हैं और योजना को XML प्रारूप में फ़ाइल में सहेजने के लिए "इस रूप में निष्पादन योजना सहेजें ..." का चयन करें।

विधि 2 - शोप्लान विकल्पों का उपयोग करना

यह विधि विधि 1 के समान है (वास्तव में SQL सर्वर प्रबंधन स्टूडियो आंतरिक रूप से यही करता है), हालाँकि मैंने इसे पूर्णता के लिए शामिल किया है या यदि आपके पास SQL ​​सर्वर प्रबंधन स्टूडियो उपलब्ध नहीं है।

अपनी क्वेरी चलाने से पहले, एक run चलाएं निम्नलिखित कथनों में से। स्टेटमेंट बैच में एकमात्र स्टेटमेंट होना चाहिए, यानी आप एक ही समय में किसी अन्य स्टेटमेंट को निष्पादित नहीं कर सकते:

SET SHOWPLAN_TEXT ON
SET SHOWPLAN_ALL ON
SET SHOWPLAN_XML ON
SET STATISTICS PROFILE ON
SET STATISTICS XML ON -- The is the recommended option to use

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

एक बार जब आप कर लेते हैं तो आप इस विकल्प को निम्नलिखित कथन के साथ बंद कर सकते हैं:

SET <<option>> OFF

निष्पादन योजना प्रारूपों की तुलना

जब तक आपके पास मजबूत वरीयता न हो, मेरी सिफारिश STATISTICS XML . का उपयोग करने की है विकल्प। यह विकल्प SQL सर्वर प्रबंधन स्टूडियो में "वास्तविक निष्पादन योजना शामिल करें" विकल्प के बराबर है और सबसे सुविधाजनक प्रारूप में सबसे अधिक जानकारी प्रदान करता है।

  • SHOWPLAN_TEXT - क्वेरी को क्रियान्वित किए बिना एक मूल पाठ आधारित अनुमानित निष्पादन योजना प्रदर्शित करता है
  • SHOWPLAN_ALL - क्वेरी को क्रियान्वित किए बिना, लागत अनुमानों के साथ पाठ आधारित अनुमानित निष्पादन योजना प्रदर्शित करता है
  • SHOWPLAN_XML - क्वेरी को क्रियान्वित किए बिना, लागत अनुमानों के साथ XML आधारित अनुमानित निष्पादन योजना प्रदर्शित करता है। यह SQL सर्वर प्रबंधन स्टूडियो में "अनुमानित निष्पादन योजना प्रदर्शित करें..." विकल्प के बराबर है।
  • STATISTICS PROFILE - क्वेरी निष्पादित करता है और टेक्स्ट आधारित वास्तविक निष्पादन योजना प्रदर्शित करता है।
  • STATISTICS XML - क्वेरी निष्पादित करता है और एक्सएमएल आधारित वास्तविक निष्पादन योजना प्रदर्शित करता है। यह SQL सर्वर प्रबंधन स्टूडियो में "वास्तविक निष्पादन योजना शामिल करें" विकल्प के बराबर है।

विधि 3 - SQL सर्वर प्रोफाइलर का उपयोग करना

यदि आप अपनी क्वेरी को सीधे नहीं चला सकते हैं (या जब आप इसे सीधे निष्पादित करते हैं तो आपकी क्वेरी धीरे-धीरे नहीं चलती है - याद रखें कि हम क्वेरी की योजना खराब प्रदर्शन करना चाहते हैं), तो आप SQL सर्वर प्रोफाइलर ट्रेस का उपयोग करके एक योजना को कैप्चर कर सकते हैं। विचार यह है कि जब "शोप्लान" ईवेंट में से किसी एक को कैप्चर करने वाला ट्रेस चल रहा हो, तो अपनी क्वेरी को चलाएं।

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

  1. एसक्यूएल सर्वर प्रोफाइलर खोलें और वांछित डेटाबेस से कनेक्ट होने वाला एक नया ट्रेस बनाएं जिसके खिलाफ आप ट्रेस रिकॉर्ड करना चाहते हैं।
  2. "ईवेंट चयन" टैब के अंतर्गत "सभी ईवेंट दिखाएं" चेक करें, "प्रदर्शन" -> "शोप्लान एक्सएमएल" पंक्ति जांचें और ट्रेस चलाएं।
  3. जब तक ट्रेस चल रहा हो, धीमी गति से चलने वाली क्वेरी को चलाने के लिए आपको जो कुछ भी करने की आवश्यकता है वह करें।
  4. क्वेरी पूरी होने तक प्रतीक्षा करें और ट्रेस बंद कर दें।
  5. ट्रेस को बचाने के लिए SQL सर्वर प्रोफाइलर में प्लान xml पर राइट क्लिक करें और XML फॉर्मेट में फाइल करने के लिए प्लान को सेव करने के लिए "इवेंट डेटा निकालें..." चुनें।

आपको मिलने वाली योजना SQL सर्वर प्रबंधन स्टूडियो में "वास्तविक निष्पादन योजना शामिल करें" विकल्प के बराबर है।

विधि 4 - क्वेरी कैश का निरीक्षण करना

यदि आप अपनी क्वेरी को सीधे नहीं चला सकते हैं और आप एक प्रोफाइलर ट्रेस कैप्चर भी नहीं कर सकते हैं तो आप अभी भी SQL क्वेरी प्लान कैश का निरीक्षण करके एक अनुमानित योजना प्राप्त कर सकते हैं।

हम SQL सर्वर DMV को क्वेरी करके प्लान कैश का निरीक्षण करते हैं। निम्नलिखित एक मूल क्वेरी है जो सभी कैश्ड क्वेरी प्लान (xml के रूप में) को उनके SQL टेक्स्ट के साथ सूचीबद्ध करेगी। अधिकांश डेटाबेस पर आपको परिणामों को फ़िल्टर करने के लिए अतिरिक्त फ़िल्टरिंग क्लॉज़ जोड़ने की आवश्यकता होगी, केवल उन योजनाओं के लिए जिनमें आप रुचि रखते हैं।

SELECT UseCounts, Cacheobjtype, Objtype, TEXT, query_plan
FROM sys.dm_exec_cached_plans 
CROSS APPLY sys.dm_exec_sql_text(plan_handle)
CROSS APPLY sys.dm_exec_query_plan(plan_handle)

इस क्वेरी को निष्पादित करें और एक नई विंडो में योजना को खोलने के लिए योजना एक्सएमएल पर क्लिक करें - एक्सएमएल प्रारूप में फाइल करने के लिए योजना को सहेजने के लिए राइट क्लिक करें और "निष्पादन योजना को इस रूप में सहेजें ..." चुनें।

नोट:

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

आप एन्क्रिप्टेड संग्रहीत कार्यविधियों के लिए निष्पादन योजना को कैप्चर नहीं कर सकते हैं।

"वास्तविक" बनाम "अनुमानित" निष्पादन योजनाएं

एक वास्तविक निष्पादन योजना वह है जहां SQL सर्वर वास्तव में क्वेरी चलाता है, जबकि एक अनुमानित निष्पादन योजना SQL सर्वर काम करता है जो वह करेगा क्वेरी निष्पादित किए बिना करें। हालांकि तार्किक रूप से समकक्ष, एक वास्तविक निष्पादन योजना अधिक उपयोगी है क्योंकि इसमें अतिरिक्त विवरण और आंकड़े शामिल हैं जो वास्तव में क्वेरी को निष्पादित करते समय हुआ था। समस्याओं का निदान करते समय यह आवश्यक है जहां SQL सर्वर अनुमान बंद हैं (जैसे कि जब आंकड़े पुराने हों)।

  • अनुमानित और वास्तविक निष्पादन योजना पर दोबारा गौर किया गया

मैं क्वेरी निष्पादन योजना की व्याख्या कैसे करूं?

यह एक ऐसा विषय है जो अपने आप में एक (निःशुल्क) पुस्तक के योग्य है।

यह भी देखें:

  • निष्पादन योजना की मूल बातें
  • शोपलान अनुमति और लेनदेन-एसक्यूएल बैच
  • SQL सर्वर 2008 - क्वेरी हैश और क्वेरी प्लान हैश का उपयोग करना
  • SQL सर्वर प्लान कैश का विश्लेषण करना


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर 2016:एक डेटाबेस का बैकअप लें

  2. उपलब्धता समूहों पर हमेशा SQL सर्वर की निगरानी करने के विभिन्न तरीके

  3. SQL सर्वर ट्रंकेशन और 8192 सीमा

  4. IS DISTINCT FROM और IS DISTINCT F से फिर से कैसे लिखा जाए?

  5. SQL सर्वर इंडेक्स फ़्रेग्मेंटेशन को ठीक करने के लिए टिप्स