यदि आपके डेटाबेस उपयोगकर्ता यह शिकायत कर रहे हैं कि SQL सर्वर का प्रदर्शन हाल ही में खराब रहा है, तो संभव है कि आप एक या अधिक SQL सर्वर बाधाओं के प्रभावों का अनुभव कर रहे हों। ये अड़चनें कई कारणों से होती हैं, लेकिन ये अक्सर मेमोरी, I/O, या CPU की समस्याओं के परिणामस्वरूप होती हैं।
हालांकि यह निर्धारित करना हमेशा आसान नहीं होता है कि प्रदर्शन समस्याएँ SQL सर्वर की अड़चन से उत्पन्न होती हैं या किसी अन्य स्रोत से, आप समस्या के स्रोत के लिए अपनी खोज को सीमित करने में मदद करने के लिए बाधाओं के इन सामान्य लक्षणों की तलाश कर सकते हैं।
SQL सर्वर बाधाओं के सामान्य लक्षण
- SQL सर्वर प्रोसेसर को हॉगिंग करता है
- प्रश्नों पर अधिक निष्पादन समय
- अत्यधिक I/O
- एप्लिकेशन लॉग आउट-ऑफ़-मेमोरी संदेश दिखा रहा है
- डिस्क पर अत्यधिक गतिविधि
- प्रति I/O के लिए लंबा प्रतीक्षा समय
इन लक्षणों में से एक या अधिक का अचानक प्रकट होना एक अच्छा संकेत है कि आपके सिस्टम में कहीं न कहीं SQL सर्वर अड़चन है। अब, इसे ढूंढना आपका काम है।
SQL सर्वर बाधाओं के प्रकार
SQL सर्वर बाधाओं के तीन मुख्य प्रकार हैं:मेमोरी, I/O, और CPU। डीबीए के लिए प्रत्येक के कारणों, लक्षणों और सुधारों से परिचित होना महत्वपूर्ण है ताकि वे बाधाओं को जल्दी से पहचान सकें और हटा सकें और खराब प्रदर्शन के प्रभाव को कम कर सकें। हमने निगरानी के लिए कुछ बेहतरीन प्रदर्शन काउंटरों को भी शामिल किया है जो प्रदर्शन बाधाओं को तुरंत पहचानने में मदद करेंगे।
स्मृति बाधाएं
मेमोरी अड़चनें आमतौर पर अपर्याप्त मेमोरी संसाधनों या SQL सर्वर गतिविधियों के परिणामस्वरूप उपलब्ध मेमोरी को खा जाती हैं। जिन लक्षणों पर ध्यान देना चाहिए उनमें लंबे समय तक क्वेरी निष्पादन समय, अत्यधिक I/O, एप्लिकेशन लॉग में आउट-ऑफ-मेमोरी संदेश और बार-बार सिस्टम क्रैश शामिल हैं।
मेमोरी से संबंधित बाधाओं से बचने का सबसे अच्छा तरीका अनावश्यक या अप्रचलित प्रश्नों से छुटकारा पाने के लिए क्वेरी ऑप्टिमाइज़र का उपयोग करना और डिस्क पर यात्राओं को सीमित करने के लिए बफर कैश हिट अनुपात के संयोजन के साथ पृष्ठ जीवन प्रत्याशा को कॉन्फ़िगर करना है। यदि अड़चन से बचने में बहुत देर हो चुकी है, तो प्रश्नों की समीक्षा और ट्यूनिंग, मेमोरी को फिर से कॉन्फ़िगर करने या भौतिक मेमोरी जोड़ने का प्रयास करें।
मॉनिटर करने के लिए काउंटर:उपलब्ध मेमोरी, कुल सर्वर मेमोरी, लक्ष्य सर्वर मेमोरी, पेज/सेकंड, बफर कैश हिट अनुपात
I/O अड़चनें
जब TempDB जैसे नियमित डेटाबेस संचालन का समर्थन करने के लिए पर्याप्त संग्रहण उपलब्ध नहीं होता है, तो I/O बाधाएं उत्पन्न होने की संभावना होती है। लंबे समय तक प्रतिक्रिया समय, एप्लिकेशन धीमापन, और बार-बार कार्य समय-बहिष्कार सभी प्रमुख संकेतक हैं कि आपके पास I/O अड़चन है।
आप अलार्म और थ्रेशोल्ड अलर्ट के साथ निगरानी स्थापित करके इस प्रकार की अड़चन से बच सकते हैं ताकि यह पता लगाया जा सके कि कौन सी गतिविधियाँ अत्यधिक मात्रा में भंडारण का उपयोग करती हैं। यदि कोई I/O बाधा उत्पन्न होती है, तो डिस्क से और उसके लिए डेटाबेस पृष्ठों के पढ़ने और लिखने को सीमित करें। इसके लिए आपको बार-बार अनुक्रमणिका स्कैन, अक्षम क्वेरी और पुराने आंकड़ों की जांच करने और उन्हें ठीक करने की आवश्यकता होगी।
मॉनिटर करने के लिए काउंटर:औसत डिस्क कतार लंबाई, औसत डिस्क सेकंड/रीड, औसत डिस्क सेकंड/राइट,% डिस्क समय, औसत डिस्क रीड/सेकंड, औसत डिस्क राइट/सेकंड
CPU अड़चनें
CPU बाधाओं का प्रमुख कारण अपर्याप्त हार्डवेयर संसाधन है। SQL सर्वर अत्यधिक CPU का उपयोग कर रहा है या नहीं यह निर्धारित करने के लिए अपने लॉग की जाँच करके इस अड़चन को पहचानना काफी आसान है।
एक आदर्श दुनिया में, आप एक समर्पित SQL सर्वर-केवल सर्वर रखने और अन्य सभी सॉफ़्टवेयर को किसी अन्य मशीन पर चलाकर CPU बाधाओं से बच सकते हैं। चूंकि यह अधिकांश डीबीए के लिए एक विकल्प नहीं है, इसलिए आपको यह जानना होगा कि अपने सीपीयू को कैसे बाधा डालना है।
सीपीयू हॉग की पहचान करने के लिए पहला कदम है। एक बार जब आप जान जाते हैं कि समस्या कहाँ है, तो आप प्रश्नों को ट्यून कर सकते हैं, अपनी निष्पादन योजनाओं में सुधार कर सकते हैं या सिस्टम को फिर से कॉन्फ़िगर कर सकते हैं।
मॉनिटर करने के लिए काउंटर:% प्रोसेसर समय, बैच अनुरोध/सेकंड, SQL संकलन/सेकंड, SQL पुनर्संकलन/सेकंड
SQL सर्वर प्रदर्शन बाधाओं पर एक कहानी
"हमारे पास निपटने के लिए कुछ SQL सर्वर प्रदर्शन अड़चनें हैं," मेरे बॉस ने एक शुक्रवार की देर रात कहा।
"आपको कैसे मालूम?" मैंने पूछा।
“बिक्री शिकायत कर रही है कि उनका डेटाबेस हाल ही में धीमा हो रहा है। हमें देखना होगा कि इसके साथ क्या हो रहा है।"
"ठीक है। मैं एक कॉन्फ़्रेंस रूम बुक करूँगा ताकि हम बैठकर उस पर काम कर सकें।”
"परेशान मत करो," बॉस ने कहा। "शुक्रवार की दोपहर में देर हो चुकी है। इसका मतलब है कि बाधाओं का अध्ययन करने का सबसे अच्छा तरीका हमारे कुछ जोड़े हैं। हम बाजार में पाइक पब जा रहे हैं।"
हम पाइक प्लेस मार्केट में स्थित बार में गए और खिड़की के पास एक छोटी सी मेज पाई।
"आपकी पसंदीदा तरह की अड़चन क्या है?" बॉस ने पूछा।
मैंने कहा कि मैं 22-औंस की अड़चन में एक शरारती नेल्ली के पक्ष में था।
"अच्छा विकल्प," बॉस ने कहा। "आप इसे ऑर्डर करें, और मेरे पास साइट्रस समर एले होगा।"
जब हम अपनी बाधाओं के आने का इंतजार कर रहे थे, हम SQL सर्वर के प्रदर्शन की बाधाओं पर व्यापार करने के लिए नीचे उतर गए।
"हमें कई जगहों पर समस्याओं की जाँच करनी होगी," बॉस ने कहा। "वे मेमोरी, स्टोरेज या प्रोसेसर के साथ समस्या हो सकती हैं, लेकिन वे सभी उपयोगकर्ताओं के लिए समान दिखते हैं, है ना? क्रमी प्रदर्शन।
"सीपीयू की समस्याएं इतनी मुश्किल नहीं हैं। यदि यह समस्या है, तो हम देखेंगे कि SQL सर्वर प्रोसेसर को हॉगिंग कर रहा है और इसे हर समय स्पाइक कर रहा है।
"यदि यह एक स्मृति समस्या है, तो हम प्रश्नों पर अधिक निष्पादन समय और अधिक I/O जैसी चीजें देखेंगे क्योंकि एप्लिकेशन को डिस्क पर चलते रहना पड़ता है। हम स्मृति से बाहर संदेशों के लिए एप्लिकेशन लॉग भी देख सकते हैं।
"और अगर अड़चन भंडारण में है, तो हम डिस्क पर अत्यधिक गतिविधि और प्रति I/O लंबे प्रतीक्षा समय देखेंगे।"
हमारी अड़चनें आ गईं। हमने उनका ध्यानपूर्वक अध्ययन किया क्योंकि हमने प्रदर्शन समस्या पर अधिक गहराई से विचार किया।
SQL सर्वर प्रदर्शन बाधाओं के कई संभावित स्रोत
"क्या होगा अगर यह एक I/O समस्या है?" मैंने पूछ लिया। "हमें देखना चाहिए कि क्या कुल प्रतीक्षा समय की तुलना में WRITELOG प्रतीक्षा-समय बहुत अधिक है। या, I/O की बात करें तो, शायद SQL में ही कोई समस्या है। यदि एक विशाल टेबल पर नेस्टेड लूप जॉइन की तरह अक्षम कोड है, तो एसक्यूएल आंतरिक तालिका पर पंक्तियों को अरबों बार पढ़ने के लिए कह सकता है। यह वास्तव में प्रदर्शन को दंडित करेगा। ”
"हो सकता है," बॉस ने कहा। "कॉम्प्लेक्स जॉइन और सॉर्टिंग ऑपरेशन कठिन हो सकते हैं, खासकर जब tempdb डेटाबेस ठीक से कॉन्फ़िगर नहीं किया गया हो। Tempdb विवाद सामान्य डेटाबेस लॉक की तरह दिखता है, लेकिन यह वास्तव में समवर्ती प्रक्रियाओं के कारण विवाद है क्योंकि सभी आवंटन पृष्ठों पर अपनी बारी की प्रतीक्षा कर रहे हैं। "
"इन सभी चीजों की जांच करने के लिए हम किन उपकरणों का उपयोग कर सकते हैं?" मैंने पूछा।
"एसक्यूएल सर्वर में संग्रहीत प्रक्रियाओं की जांच के लिए एक प्रोफाइलर था, लेकिन यह बहिष्कृत है। ऐसा कुछ समस्या प्रश्नों को खोजने और उनका निदान करने का एक अच्छा तरीका है, भले ही यह केवल पहला कदम हो। फिर गतिशील प्रबंधन दृश्य और कार्य हैं जो आपके सर्वर और डेटाबेस के स्वास्थ्य की निगरानी करने, समस्याओं को दूर करने और आपके SQL को ट्यून करने में आपकी सहायता करते हैं।"
"लेकिन SQL सर्वर में बहुत सारे चलने वाले हिस्से हैं," मैंने कहा। "मेरे पास एक ऐसा टूल है जो पूरी तस्वीर को बाहर से अंदर देखता है।"
"तो क्या मैं। अधिमानतः क्लाउड से, इसलिए हमें इसे करने के लिए परिसर में अधिक हार्डवेयर और सॉफ़्टवेयर की आवश्यकता नहीं है।"
SQL सर्वर में प्रदर्शन बाधाओं को दूर करना
पाइक में भीड़ होने लगी थी। और, जैसा कि मालिक और मुझे एक पब में बैठकर बात करने की इच्छा थी, शुक्रवार की शाम थी, आखिरकार। हमारे पास जाने के लिए अन्य स्थान थे, अन्य लोगों को देखने के लिए और अन्य चीजों के बारे में बात करने के लिए।
"बाधाओं का पता चलने के बाद हमें क्या करना चाहिए?" मैंने पूछा।
"हम सामान्य संदिग्धों को घेर लेते हैं," बॉस ने कहा। “बहुत अधिक मेमोरी का उपयोग करने से बचने के लिए, हमें डेटाबेस डेवलपर्स को यह बताना होगा कि उनका कौन सा कोड और क्वेरी मेमोरी को लीक कर रही है। अगर हमें चार, पांच या छह तालिकाओं में शामिल होने वाले ऑपरेशन मिलते हैं, तो हमें डेवलपर्स को डेटाबेस को फिर से डिज़ाइन करने के लिए कुछ SQL सर्वर ट्यूनिंग टिप्स और सर्वोत्तम अभ्यास देना होगा। या, हमारे पास बहुत अधिक अनुक्रमणिकाएँ हो सकती हैं और हम उन्हें अद्यतन करने वाले चक्रों को बर्बाद कर रहे हैं; यह CPU और I/O पर उतना ही कठिन है जितना कि बहुत कम अनुक्रमणिकाएँ। हमें SQL सर्वर इंडेक्स फ़्रेग्मेंटेशन में समस्या हो सकती है, या हमें अप्रचलित और डुप्लीकेट इंडेक्स को हटाना पड़ सकता है।"
"समझ में आता है," मैंने कहा। "शायद हमें इसमें और हार्डवेयर फेंकने की जरूरत है। तेज़ डिस्क I/O बाधाओं के साथ मदद कर सकती हैं। अधिक से अधिक तेज़ CPU क्वेरी प्रतिक्रिया समय में फर्क करते हैं। और RAM जोड़ने का अर्थ है अधिक SQL सर्वर मापनीयता, है ना?"
"हाँ," बॉस ने कहा, "लेकिन पहले मैं यह सुनिश्चित करना चाहता हूँ कि मूल कारण विकास या DevOps समस्या नहीं है। एक बार जब मुझे यकीन हो जाए कि ऐसा नहीं है, तो मैं और हार्डवेयर खरीदें कार्ड खेलूंगा।"
हम एक पल के लिए बैठे और शुक्रवार की शाम के मौज-मस्ती करने वालों से भरे पब को देखा।
"बॉस," मैंने पूछा, "क्या आपको लगता है कि ये सभी लोग जानते हैं कि अवरुद्ध सत्रों, अधिकतम I/O प्रतीक्षा, पृष्ठ जीवन प्रत्याशा और बफर कैश हिट अनुपात से निपटने के बोझ के बिना, वे सभी कितने लापरवाह अस्तित्व का नेतृत्व करते हैं?"पी>
"यह सहन करने के लिए एक क्रॉस है, है ना?" बॉस ने उत्तर दिया। "ज्यादातर लोगों को पता नहीं है कि हम किस दौर से गुज़र रहे हैं। अच्छी बात यह है कि हम SQL सर्वर के प्रदर्शन की बाधाओं से इतनी शांति से निपटते हैं, दबाव में और इतने अच्छे स्वाद के साथ। अच्छे स्वाद की बात करें तो, आप अपनी अड़चन पर कैसे काम कर रहे हैं?"
मैंने जाँचा। “मेरी अड़चन खाली है। मेरी बोतल भी ऐसी ही है।”
"मेरी भी है। जाने का समय। हमारे पास करने के लिए काम है।"
क्या जीरो SQL सर्वर बॉटलनेक सिस्टम संभव है?
हम जानते हैं कि इन तीन सामान्य प्रकार के SQL सर्वर बाधाओं से बचने के लिए हम कुछ कदम उठा सकते हैं। लेकिन क्या SQL सर्वर डेटाबेस को इतनी अच्छी तरह से कॉन्फ़िगर करना संभव है कि इसमें शून्य बाधाएं हों?
संक्षिप्त उत्तर शायद नहीं है। यहां तक कि सबसे मेहनती DBA में SQL सर्वर की अड़चनें हर बार पॉप अप होंगी। लेकिन आप लगातार बाधाओं से बचने और प्रदर्शन पर उनके प्रभाव को कम करने के लिए कदम उठा सकते हैं। उदाहरण के लिए, ब्रेंट ओज़र आपके SQL सर्वर को ट्यून करने के लिए परफ़मन काउंटर्स की निगरानी के लिए कुछ बेहतरीन टिप्स प्रदान करता है, और आप बाधाओं की पहचान करने और उन्हें जल्दी से ठीक करने में मदद करने के लिए sys.dm_os_performance_counters दृश्य का उपयोग कर सकते हैं।
SQL सर्वर की अड़चनें DBA जीवन का एक तथ्य है। सौभाग्य से, पर्याप्त निरीक्षण, परिश्रमी निगरानी और बार-बार क्वेरी ट्यूनिंग के साथ, प्रदर्शन के मुद्दों को तब तक निपटाया जा सकता है जब तक कि उपयोगकर्ताओं को पता न चले कि कोई समस्या है।