अपनी पिछली पोस्ट में, मैंने एक कारण बताया था कि आपको sysprocesses
जैसे पदावनत सिस्टम तालिकाओं का उपयोग बंद कर देना चाहिए . यह प्रदर्शन के कारणों के लिए नहीं था, सीधे तौर पर, या केवल Microsoft की प्रलेखित सर्वोत्तम प्रथाओं का पालन करने के लिए नहीं था, बल्कि आपके द्वारा किए जा सकने वाले निर्णयों के इर्द-गिर्द घूमता था जब आपके पास केवल कुछ डेटा तक पहुंच होती थी।
इस बार, मैं SQL सर्वर क्लाइंट टूल्स के साथ शामिल एक फीचर के बारे में बात करना चाहता हूं जिसका हमें इन दिनों उपयोग नहीं करना चाहिए - न केवल इसलिए कि इसे बहिष्कृत किया गया है, बल्कि इससे भी महत्वपूर्ण बात यह है कि इसमें सर्वर को पूरी तरह से नीचे ले जाने की क्षमता है:पी>
SQL सर्वर प्रोफाइलर
SQL सर्वर 2012 के बाद से (और, बहुत कम हद तक, SQL Server 2008 के बाद से), SQL सर्वर इंस्टेंस पर घटनाओं की निगरानी के लिए सबसे पूर्ण और लचीला समाधान विस्तारित ईवेंट रहा है। दूसरी ओर, चूंकि इसका पहली बार आविष्कार किया गया था (लगभग ठीक उसी समय जब मैंने अपना करियर शुरू किया था), SQL सर्वर प्रोफाइलर गलती से किसी सर्वर को अपने घुटनों पर लाने के सबसे शानदार तरीकों में से एक रहा है।
अभी कुछ समय पहले हमारे साथ भी कुछ ऐसा ही हुआ था। एक डेवलपर ने अपने द्वारा किए जा रहे राउंड-ट्रिप की संख्या को कम करने के लिए अपने एप्लिकेशन में बदलाव किया। उन्होंने स्थानीय रूप से और हमारे विकास के माहौल में, फ़िल्टर किए गए ट्रेस के साथ प्रोफाइलर का उपयोग करके, यह पुष्टि करने के लिए कि उनके परिवर्तन अपेक्षित रूप से काम कर रहे थे, एप्लिकेशन चलाए। इस बिंदु पर मैं आपको याद दिला दूं कि SQL सर्वर प्रोफाइलर के आधिकारिक दस्तावेज में निम्नलिखित चेतावनी शामिल है:
एसक्यूएल ट्रेस और एसक्यूएल सर्वर प्रोफाइलर बहिष्कृत हैं। Microsoft.SqlServer.Management.Trace नाम स्थान जिसमें Microsoft SQL Server ट्रेस और रीप्ले ऑब्जेक्ट शामिल हैं, को भी हटा दिया गया है। यह सुविधा Microsoft SQL सर्वर के भविष्य के संस्करण में हटा दी जाएगी। नए विकास कार्य में इस सुविधा का उपयोग करने से बचें, और वर्तमान में इस सुविधा का उपयोग करने वाले अनुप्रयोगों को संशोधित करने की योजना बनाएं।वैसे भी, जब उन्होंने अपने एप्लिकेशन के नए संस्करण को उत्पादन में तैनात किया, और उसी फ़िल्टर किए गए ट्रेस के साथ उत्पादन सर्वर को लक्षित किया, तो यह इतना अच्छा नहीं हुआ। एप्लिकेशन नाम पर उनके वाइल्डकार्ड फ़िल्टर ने इस सर्वर से कनेक्ट होने वाले अन्य (समान नाम वाले) एप्लिकेशन को भी ध्यान में नहीं रखा, और उन्होंने तुरंत अपनी खुली प्रोफाइलर विंडो की तुलना में अधिक जानकारी कैप्चर करना शुरू कर दिया। इसके परिणामस्वरूप सभी उपयोगकर्ताओं और उस उदाहरण से कनेक्ट होने वाले एप्लिकेशन के लिए कनेक्शन समय में एक भयावह वृद्धि हुई। यह कहना गलत होगा कि शिकायतें दर्ज की गई थीं।
जब अपराधी निर्धारित किया गया था, और हमें डेवलपर से प्रतिक्रिया मिली, तो आप देख सकते हैं कि उनके प्रोफाइलर ट्रेस को रोकने के तुरंत बाद कनेक्शन समय सामान्य हो गया (विस्तार करने के लिए क्लिक करें):
एक SQL सर्वर प्रोफाइलर मिनी-आपदा
यह निश्चित रूप से एक ऐसा परिदृश्य है जहां पुराना "मेरी मशीन पर काम किया गया" कथन किसी भी तरह से इसका मतलब यह नहीं है कि यह व्यस्त उत्पादन सर्वर पर अच्छा काम करेगा। और इस घटना ने लॉगऑन ट्रिगर को संशोधित करने के बारे में एक सक्रिय बातचीत का नेतृत्व किया है जो पहले से ही हमारे वातावरण में सभी सर्वरों पर मौजूद है ताकि केवल एप्लिकेशन नाम प्रोफाइलर को उसके कनेक्शन स्ट्रिंग में ब्लॉक किया जा सके।
शायद यह एक प्रोफाइलर समस्या नहीं है। (लेकिन यह एक तरह का है।)
मैं यहां यह सुझाव देने के लिए नहीं हूं कि विस्तारित घटनाओं सहित अन्य निगरानी उपकरण, संभवतः एक समान (या बदतर!) तरीके से सर्वर को नीचे लाने के लिए अनुपयुक्त रूप से उपयोग नहीं किए जा सकते हैं। SQL सर्वर प्रोफाइलर को छुए बिना, अनजाने में SQL सर्वर की आवृत्ति को वास्तव में प्रतिकूल तरीकों से प्रभावित करने के बहुत सारे अवसर हैं।
लेकिन Profiler इस प्रकार के लक्षणों के लिए कुख्यात है क्योंकि यह उपभोग करता है जानकारी। यह एक ग्रिड के साथ एक यूजर इंटरफेस है जो नई पंक्तियों को प्रस्तुत करता है क्योंकि यह उन्हें प्राप्त करता है; दुर्भाग्य से, यह SQL सर्वर को प्रतीक्षा करता है जबकि यह SQL सर्वर को अधिक पंक्तियों को प्रसारित करने की अनुमति देने से पहले उन्हें प्रस्तुत करता है। यह व्यवहार उसी तरह है जैसे SQL सर्वर प्रबंधन स्टूडियो क्वेरी को धीमा कर सकता है और उच्च ASYNC_NETWORK_IO
का कारण बन सकता है प्रतीक्षा करता है क्योंकि यह बड़ी मात्रा में आउटपुट को अपने ग्रिड में प्रस्तुत करने का प्रयास करता है। यह एक सरलीकरण है (और जिस तरह से अंतर्निहित SQL ट्रेस को व्यवहार करने के लिए बनाया जा सकता है, उससे भ्रमित नहीं होना चाहिए, जिसे ग्रेग गोंजालेज (@SQLsensei) "डोंट फियर द ट्रेस" में बताते हैं), लेकिन यह वास्तव में क्या होता है ऊपर दिखाया गया परिदृश्य का प्रकार:उस अड़चन का किसी भी अन्य प्रक्रिया पर व्यापक प्रभाव पड़ता है जो उसी कोड पथ में कुछ भी करने की कोशिश कर रहा है जिसे आप ट्रेस कर रहे हैं (एक कनेक्शन स्थापित करने की कोशिश सहित)।
विस्तारित घटनाओं से डरते हैं?
मत बनो। अब समय आ गया है कि हम सभी प्रोफाइलर को छोड़ दें और वर्तमान को अपनाएं . वहाँ ट्यूटोरियल और गाइड की कोई कमी नहीं है, जिसमें माइक्रोसॉफ्ट का अपना क्विकस्टार्ट और इस साइट पर कई लेख शामिल हैं।
यदि आपके पास मौजूदा निशान हैं जिन पर आप भरोसा करते हैं, तो जोनाथन केहैयस (@SQLPoolBoy) के पास मौजूदा ट्रेस को विस्तारित ईवेंट में बदलने के लिए वास्तव में आसान स्क्रिप्ट है। आप अभी भी मूल ट्रेस को Profiler UI के साथ कॉन्फ़िगर करने के लिए स्वतंत्र महसूस कर सकते हैं, यदि वह वह जगह है जहां आप सबसे अधिक आरामदायक हैं; कृपया इसे किसी उत्पादन सर्वर से कनेक्ट किए बिना करें। आप उस स्क्रिप्ट के बारे में यहाँ पढ़ सकते हैं और जोनाथन के कुछ अन्य विस्तारित ईवेंट लेख यहाँ देख सकते हैं।
यदि आपको उपयोगकर्ता अनुभव के साथ कठिन समय हो रहा है, तो आप अकेले नहीं हैं, लेकिन कुछ उत्तर हैं:
- एरिन स्टेलाटो (@erinstellato) लंबे समय से विस्तारित घटनाओं के लिए एक शानदार वकील रहा है, और अक्सर यह आश्चर्य करता है कि लोग सामान्य रूप से प्रोफाइलर और एसक्यूएल ट्रेस को छोड़ने के लिए अनिच्छुक क्यों हैं। 2016 की अपनी पोस्ट में उन्होंने कुछ अंतर्दृष्टि (और बहुत सारी टिप्पणियों को प्रेरित किया) है, "आप विस्तारित घटनाओं से क्यों बचते हैं?"; शायद इस बारे में कुछ जानकारी है कि क्या आपके रुकने के कारण अभी भी (जैसा) 2021 में मान्य हैं।
- SSMS के आधुनिक संस्करणों में निर्मित एक XEvent Profiler है, जो Azure Data Studio के समकक्ष एक्सटेंशन के साथ है। हालांकि, भ्रमित रूप से, उन्होंने इस विस्तार को कहा - उन सभी चीजों में से जिनकी कोई संभवतः कल्पना कर सकता है - एसक्यूएल सर्वर प्रोफाइलर . उस पसंद के बारे में एरिन के कुछ विचार भी हैं।
- एरिक डार्लिंग (@erikdarlingdata) ने
sp_HumanEvents
बनाया है एक्सटेंडेड इवेंट्स पर स्विच करने के कुछ दर्द को दूर करने के लिए। मेरे पसंदीदा "स्टिक टू द पॉइंट" लोगों में से एक, एरिकsp_HumanEvents
. का वर्णन करता है इस प्रकार है:"यदि आप क्वेरी मेट्रिक्स को प्रोफाइल करने के लिए दर्द रहित तरीका चाहते हैं, तो प्रतीक्षा करें आँकड़े, ब्लॉक करना, संकलित करना, या विस्तारित ईवेंट के साथ पुन:संकलित करना, यह आपका यूनिकॉर्न है।"