प्रदर्शन की निगरानी या सिस्टम की सुस्ती जैसी समस्या के निवारण के दौरान, उच्च अवधि, उच्च CPU वाले प्रश्नों को ढूंढना या कैप्चर करना या निष्पादन के दौरान महत्वपूर्ण I/O उत्पन्न करना आवश्यक हो सकता है। क्वेरी प्रदर्शन के बारे में जानकारी प्राप्त करने के लिए आप DMV या क्वेरी स्टोर का उपयोग कर सकते हैं, लेकिन दोनों स्रोतों में जानकारी एक समग्र है। DMV एक क्वेरी के लिए औसत CPU, I/O, अवधि आदि का प्रतिनिधित्व करते हैं, जब तक कि यह कैश में है। क्वेरी स्टोर कई संसाधनों के लिए औसत मीट्रिक भी प्रदान करता है, लेकिन यह समय की एक निर्धारित विंडो (उदा. 30 मिनट या एक घंटे) पर एकत्रित होता है। निश्चित रूप से तीसरे पक्ष के निगरानी समाधान हैं जो आपको यह सब और अधिक देने में सक्षम हैं (जैसे सेंट्रीऑन), लेकिन इस पोस्ट के लिए मैं देशी उपकरणों पर ध्यान केंद्रित करना चाहता था।
यदि आप सटीक क्वेरी या प्रश्नों के सेट को इंगित करने के लिए अलग-अलग निष्पादन के लिए क्वेरी प्रदर्शन को समझना चाहते हैं, जो एक समस्या हो सकती है, तो विस्तारित ईवेंट का उपयोग करना सबसे आसान विकल्प है। और आरंभ करने के सबसे तेज़ तरीकों में से एक XEvent Profiler का उपयोग करना है, जो SQL सर्वर प्रबंधन स्टूडियो (संस्करण 17.3 से शुरू) के माध्यम से उपलब्ध है:
SSMS में XEvent Profiler
मूल उपयोग
XEvent Profiler के लिए दो विकल्प हैं:Standard और TSQL। किसी एक का उपयोग करने के लिए बस नाम पर डबल-क्लिक करें। पर्दे के पीछे, एक आंतरिक रूप से परिभाषित ईवेंट सत्र बनाया जाता है (यदि यह पहले से मौजूद नहीं है) और शुरू हो गया है, और लाइव डेटा व्यूअर तुरंत फोकस के साथ खुलता है। ध्यान दें कि आपके द्वारा सत्र शुरू करने के बाद, यह नीचे भी दिखाई देगा प्रबंधन | विस्तारित कार्यक्रम | सत्र यह मानते हुए कि आपके पास सर्वर के खिलाफ गतिविधि है, आपको पांच सेकंड या उससे कम समय में दर्शकों में प्रविष्टियां दिखाना शुरू कर देना चाहिए।
लाइव डेटा व्यूअर (मानक सत्र शुरू करने के लिए डबल-क्लिक करने के बाद)
मानक और टीएसक्यूएल सत्र कुछ घटनाओं को साझा करते हैं, जिसमें मानक कुल मिलाकर अधिक होते हैं। यहां प्रत्येक के लिए ईवेंट की सूची दी गई है:
Standard TSQL sql_batch_starting sql_batch_starting sql_batch_completed rpc_starting rpc_completed logout logout login login existing_connection existing_connection attention
यदि आप क्वेरी निष्पादन के बारे में जानकारी को समझना चाहते हैं, जैसे कि क्वेरी को चलाने में कितना समय लगा, या कितनी I/O खपत हुई, तो दो पूर्ण घटनाओं के कारण मानक एक बेहतर विकल्प है। दोनों सत्रों के लिए, बैच, आरपीसी, और अटेंशन इवेंट के लिए सिस्टम क्वेरीज़ को बाहर करने के लिए एकमात्र फ़िल्टर है।
डेटा देखना और सहेजना
यदि हम मानक सत्र शुरू करते हैं और कुछ प्रश्न चलाते हैं, तो दर्शक में हमें घटना, क्वेरी पाठ और अन्य उपयोगी जानकारी जैसे cpu_time, logical_reads और अवधि दिखाई देती है। Rpc_completed और sql_batch_completed का उपयोग करने का एक लाभ यह है कि इनपुट पैरामीटर दिखाई देता है। ऐसे मामले में जहां एक संग्रहीत प्रक्रिया है जिसमें प्रदर्शन में बड़ी भिन्नता है, इनपुट पैरामीटर को कैप्चर करना बेहद उपयोगी हो सकता है क्योंकि हम एक निष्पादन का मिलान कर सकते हैं जो संग्रहीत प्रक्रिया में पारित विशिष्ट मान के साथ अधिक समय लेता है। इस तरह के एक पैरामीटर को खोजने के लिए, हमें अवधि के आधार पर डेटा को सॉर्ट करने की आवश्यकता होती है, जो हम डेटा फ़ीड के सक्रिय होने पर नहीं कर सकते। किसी भी प्रकार का विश्लेषण करने के लिए, डेटा फ़ीड को बंद कर देना चाहिए।
लाइव व्यूअर में डेटा फ़ीड रोकना
अब जब मेरे प्रश्न धुंधले रूप में नहीं चल रहे हैं, तो मैं अपने ईवेंट को सॉर्ट करने के लिए अवधि कॉलम पर क्लिक कर सकता हूं। जब मैं पहली बार क्लिक करूंगा तो यह आरोही क्रम में क्रमबद्ध होगा, और क्योंकि मैं आलसी हूं और नीचे स्क्रॉल नहीं करना चाहता, मैं अवरोही क्रम में क्रमबद्ध करने के लिए फिर से क्लिक करूंगा।
अवधि घटते क्रम में क्रमित इवेंट
अब मैं उन सभी घटनाओं को देख सकता हूं जिन्हें मैंने उच्चतम अवधि से न्यूनतम तक के क्रम में कैप्चर किया है। अगर मैं एक विशिष्ट संग्रहीत प्रक्रिया की तलाश में था जो धीमी थी, तो मैं इसे तब तक नीचे स्क्रॉल कर सकता था जब तक मुझे यह नहीं मिल जाता (जो दर्दनाक हो सकता है), या मैं डेटा को समूह या फ़िल्टर कर सकता था। यहां समूह बनाना आसान है, क्योंकि मुझे संग्रहीत कार्यविधि का नाम पता है।
ऑब्जेक्ट_नाम व्यूअर के शीर्ष भाग में प्रदर्शित होता है, लेकिन किसी भी rpc_completed ईवेंट पर क्लिक करने से विवरण फलक में कैप्चर किए गए सभी तत्व दिखाई देते हैं। ऑब्जेक्ट_नाम पर राइट-क्लिक करें, जो इसे हाइलाइट करेगा, और टेबल में शो कॉलम चुनें।
ऑब्जेक्ट_नाम को डेटा व्यूअर में जोड़ें
शीर्ष फलक में अब मैं object_name पर राइट-क्लिक कर सकता हूं और इस कॉलम द्वारा समूह का चयन कर सकता हूं। यदि मैं usp_GetPersonInfo के अंतर्गत ईवेंट का विस्तार करता हूं और फिर अवधि के अनुसार फिर से सॉर्ट करता हूं, तो अब मैं देखता हूं कि PersonID=3133 के साथ निष्पादन की अवधि उच्चतम थी।
ऑब्जेक्ट_नाम के आधार पर समूहीकृत इवेंट, usp_GetPersonInfo अवरोही अवधि के अनुसार क्रमबद्ध
डेटा को फ़िल्टर करने के लिए:प्रदर्शित विभिन्न फ़ील्ड के आधार पर परिणाम सेट को कम करने के लिए एक विंडो लाने के लिए या तो फ़िल्टर… बटन, मेनू विकल्प (विस्तारित ईवेंट | फ़िल्टर…), या CTRL + R का उपयोग करें। इस मामले में हमने object_name =usp_GetPersonInfo पर फ़िल्टर किया है, लेकिन आप सर्वर_प्रिंसिपल_नाम या क्लाइंट_एप_नाम जैसे फ़ील्ड पर भी फ़िल्टर कर सकते हैं, क्योंकि वे एकत्र किए गए थे।
यह इंगित करने योग्य है कि न तो मानक या टीएसक्यूएल सत्र किसी फ़ाइल को लिखता है। वास्तव में, किसी भी ईवेंट सत्र के लिए कोई लक्ष्य नहीं है (यदि आप नहीं जानते थे कि आप लक्ष्य के बिना ईवेंट सत्र बना सकते हैं, तो अब आप जानते हैं)। यदि आप इस डेटा को आगे के विश्लेषण के लिए सहेजना चाहते हैं, तो आपको निम्न में से एक करना होगा:
- डेटा फ़ीड को रोकें और विस्तारित ईवेंट मेनू के माध्यम से आउटपुट को फ़ाइल में सहेजें (एक्सपोर्ट टू | एक्सईएल फ़ाइल…)
- डेटा फ़ीड को रोकें और विस्तारित ईवेंट मेनू (तालिका में निर्यात करें...) के माध्यम से आउटपुट को डेटाबेस में एक तालिका में सहेजें।
- ईवेंट सत्र बदलें और लक्ष्य के रूप में event_file जोड़ें।
विकल्प 1 मेरी सिफारिश है, क्योंकि यह डिस्क पर एक फ़ाइल बनाता है जिसे आप दूसरों के साथ साझा कर सकते हैं और आगे के विश्लेषण के लिए प्रबंधन स्टूडियो में बाद में समीक्षा कर सकते हैं। प्रबंधन स्टूडियो के भीतर आपके पास ऐसे डेटा को फ़िल्टर करने की क्षमता है जो प्रासंगिक नहीं है, एक या अधिक स्तंभों के आधार पर छाँट सकते हैं, डेटा को समूहबद्ध कर सकते हैं और गणना कर सकते हैं (जैसे औसत)। यदि डेटा एक टेबल है तो आप ऐसा कर सकते हैं, लेकिन आपको टीएसक्यूएल लिखना होगा; UI में डेटा का विश्लेषण करना आसान और तेज़ है।
XEvent Profiler सत्र बदलना
आप मानक और TSQL ईवेंट सत्रों को संशोधित कर सकते हैं और आपके द्वारा किए गए परिवर्तन इंस्टेंस पुनरारंभ के माध्यम से बने रहेंगे। हालांकि, यदि ईवेंट सत्र छोड़ दिए जाते हैं (आपके द्वारा संशोधन किए जाने के बाद) तो वे वापस डिफ़ॉल्ट पर रीसेट हो जाएंगे। यदि आप स्वयं को लगातार वही परिवर्तन करते हुए पाते हैं, तो मेरा सुझाव है कि आप परिवर्तनों को स्क्रिप्ट करें और एक नया ईवेंट सत्र बनाएं जो पुनरारंभ होने पर भी जारी रहेगा। एक उदाहरण के रूप में, यदि हम अब तक कैप्चर किए गए आउटपुट को देखते हैं, तो हम देख सकते हैं कि एडहॉक क्वेरी और संग्रहीत कार्यविधियाँ दोनों निष्पादित हो गई हैं। और जबकि यह बहुत अच्छा है कि मैं संग्रहीत प्रक्रियाओं के लिए अलग-अलग इनपुट पैरामीटर देख सकता हूं, मैं व्यक्तिगत बयान नहीं देखता जो घटनाओं के इस सेट के साथ निष्पादित हो रहे हैं। वह जानकारी प्राप्त करने के लिए, मुझे sp_statement_completed ईवेंट जोड़ना होगा।
समझें कि मानक और टीएसक्यूएल दोनों ईवेंट सत्र हल्के वजन के लिए डिज़ाइन किए गए हैं। स्टेटमेंट_कम्प्लीटेड इवेंट बैच और आरपीसी इवेंट्स की तुलना में अधिक बार आग लगेंगे, इस प्रकार जब ये इवेंट किसी इवेंट सेशन का हिस्सा होते हैं तो अधिक ओवरहेड हो सकता है। कथन ईवेंट का उपयोग करते समय, मैं अत्यधिक अतिरिक्त विधेय सहित अनुशंसा करते हैं। एक अनुस्मारक के रूप में, rpc और बैच ईवेंट केवल सिस्टम प्रश्नों को फ़िल्टर कर रहे हैं - कोई अन्य विधेय नहीं है। सामान्य तौर पर, मैं इन घटनाओं के लिए अतिरिक्त विधेय की भी सिफारिश करता हूं, विशेष रूप से उच्च-मात्रा वाले कार्यभार के लिए।
यदि आप इस बारे में चिंतित हैं कि क्या मानक या TSQL सत्र चलाने से आपके सिस्टम पर प्रदर्शन प्रभावित होगा, तो समझें कि लाइव डेटा व्यूअर सिस्टम पर बहुत अधिक ओवरहेड बनाने पर डिस्कनेक्ट हो जाएगा। यह एक बड़ी सुरक्षा है, लेकिन इन ईवेंट सत्रों का उपयोग करते समय मैं अभी भी विचारशील रहूंगा। मेरा मानना है कि वे समस्या निवारण के लिए एक शानदार पहला कदम हैं, खासकर उन लोगों के लिए जो SQL सर्वर या विस्तारित ईवेंट में नए हैं। हालांकि, यदि आपके पास लाइव डेटा व्यूअर खुला है और आप अपनी मशीन से दूर चले जाते हैं, तो इवेंट सत्र चलता रहता है . लाइव डेटा व्यूअर को रोकना या बंद करना ईवेंट सत्र को रोक देगा, जिसकी मैं अनुशंसा करता हूं जब आप अपने डेटा संग्रह या समस्या निवारण के साथ समाप्त कर लें।
उन ईवेंट सत्रों के लिए जिन्हें आप लंबे समय तक चलाना चाहते हैं, अलग-अलग ईवेंट सत्र बनाएं, जो Event_file लक्ष्य के लिए लिखें और उपयुक्त विधेय हों। यदि आपको विस्तारित ईवेंट के साथ आरंभ करने के बारे में अधिक जानकारी की आवश्यकता है, तो पिछले साल SQLBits में दिए गए सत्र को Profiler से विस्तारित ईवेंट में माइग्रेट करने पर देखें।