इस साइट पर प्रतीक्षा आँकड़ों से संबंधित कई ब्लॉग पोस्ट हैं; वे सबसे महत्वपूर्ण मेट्रिक्स में से एक हैं जिनका उपयोग आप SQL सर्वर में प्रदर्शन समस्याओं का निवारण करते समय कर सकते हैं। SQL सर्वर 2005 में प्रतीक्षा आँकड़े उपलब्ध कराए गए थे और परंपरागत रूप से उन्होंने sys.dm_os_wait_statistics के माध्यम से आवृत्ति स्तर पर प्रतीक्षा का प्रतिनिधित्व किया है। सामान्य रूप से सिस्टम के प्रदर्शन का समस्या निवारण करते समय यह जानकारी बहुत अच्छी होती है, लेकिन क्वेरी प्रदर्शन को देखते समय, प्रतीक्षा जानकारी केवल तभी देखी जा सकती है जब क्वेरी निष्पादित हो रही थी और यदि वह sys.dm_os_waiting_tasks के माध्यम से किसी संसाधन पर प्रतीक्षा कर रही थी। sys.dm_os_waiting_tasks में डेटा क्षणिक है (यह वही है जो अभी प्रतीक्षा कर रहा है) और बाद में प्रदर्शन ट्यूनिंग के लिए क्वेरी के जीवन के लिए कैप्चर करना और बनाए रखना आसान नहीं है।
SQL सर्वर 2016 में एक नया DMV सामने आया है, sys.dm_exec_session_wait_stats, जो मौजूदा, सक्रिय सत्र की प्रतीक्षा के बारे में जानकारी प्रदान करता है। यदि आप session_id जानते हैं, तो आप किसी क्वेरी के शुरू होने और उसके पूरा होने पर प्रतीक्षा को ट्रैक कर सकते हैं (क्वेरी की शुरुआत और अंत में जानकारी को स्नैपशॉट करें और फिर जानकारी को अलग करें)। चुनौती यह है कि आपको क्वेरी के लिए session_id को जानना होगा, और आपको डेटा कैप्चर को पहले से सेट करना होगा - जो उच्च प्राथमिकता वाले मुद्दे के बीच में होने पर मामूली नहीं है।
प्रतीक्षा आँकड़े जानकारी SQL Server 2016 SP1 में प्रारंभ होने वाली वास्तविक निष्पादन योजना में मौजूद है। केवल शीर्ष 10 प्रतीक्षाओं को कैप्चर किया जाता है, और इस डेटा का प्रतिनिधित्व करने के संदर्भ में सीमाएं हैं। उदाहरण के लिए, CXPACKET को नजरअंदाज कर दिया जाता है और आउटपुट में शामिल नहीं किया जाता है, लेकिन इसे 2016 SP2 और 2017 CU3 और ऊपर में शामिल किया जाएगा - जहां अप्रासंगिक समानांतर प्रतीक्षा को CXCONSUMER द्वारा कैप्चर किया जाता है (जिसे वास्तविक प्लान वेट्स में शामिल नहीं किया जाएगा)।
तो हम कैसे देख सकते हैं कि एक विशिष्ट क्वेरी वास्तव में किसकी प्रतीक्षा कर रही है? हम क्वेरी स्टोर का उपयोग कर सकते हैं! SQL सर्वर 2017 में क्वेरी स्टोर में प्रतीक्षा सांख्यिकी जानकारी का कैप्चर शामिल है, और यह कार्यक्षमता Azure SQL डेटाबेस में भी उपलब्ध है। प्रतीक्षा आँकड़े एक क्वेरी योजना से जुड़े होते हैं, और समय के साथ, रनटाइम के आँकड़ों की तरह ही कैप्चर किए जाते हैं। क्वेरी स्टोर में प्रतीक्षा आंकड़ों की जानकारी को जोड़ना इसके आरंभिक रिलीज़ के बाद नंबर एक सुविधा अनुरोध था, और वह सभी जानकारी एक साथ शक्तिशाली समस्या निवारण क्षमताएं बनाती हैं।
आरंभ करना
क्वेरी स्टोर में प्रतीक्षा आँकड़े कैप्चर डिफ़ॉल्ट रूप से Azure SQL डेटाबेस के लिए सक्षम है। जब SQL Server 2017 में एक नया डेटाबेस बनाया जाता है, या SQL Server 2014 या उससे पहले के डेटाबेस को अपग्रेड किया जाता है, तो क्वेरी स्टोर डिफ़ॉल्ट रूप से अक्षम हो जाता है... और इस प्रकार प्रतीक्षा आंकड़ों का कैप्चर अक्षम हो जाता है। जब किसी डेटाबेस को SQL सर्वर 2016 से अपग्रेड किया जाता है, यदि उसमें क्वेरी स्टोर सक्षम है, तो अपग्रेड पर क्वेरी स्टोर के लिए प्रतीक्षा आँकड़े संग्रह सक्षम हो जाएगा।
प्रदर्शन उद्देश्यों के लिए, मैंने वाइडवर्ल्ड इम्पोर्टर्स डेटाबेस को पुनर्स्थापित किया है, फिर मैंने क्वेरी स्टोर को सक्षम करने के लिए नीचे दिए गए प्रश्नों को निष्पादित किया है और पहले मौजूद किसी भी डेटा को साफ़ कर दिया है (केवल आवश्यक है क्योंकि यह एक नमूना डेटाबेस है):
डाटाबेस बदलें [वाइडवर्ल्ड इम्पोर्टर्स] सेट QUERY_STORE =ON; GO ALTER DATABASE [WideWorldImporters] SET QUERY_STORE ( OPERATION_MODE =READ_WRITE); GO ALTER DATABASE [WideWorldImporters] SET QUERY_pre>डिफ़ॉल्ट सेटिंग्स का उपयोग ऊपर दिए गए कथनों के साथ किया जाता है, और यदि आप किसी भी विकल्प को बदलना चाहते हैं, तो आप ऐसा UI या ALTER DATABASE स्टेटमेंट के माध्यम से कर सकते हैं। अब जब क्वेरी स्टोर सक्षम हो गया है, तो यह क्वेरी टेक्स्ट, योजना (योजनाओं), रनटाइम आंकड़े और प्रतीक्षा आंकड़ों सहित क्वेरी डेटा को कैप्चर करना शुरू कर देगा।
प्रतीक्षा आंकड़े देख रहे हैं
कुछ डेटा उत्पन्न करने के लिए, हम एक संग्रहीत कार्यविधि बनाएंगे जो एक समानांतर क्वेरी को बार-बार चलाती है।
ड्रॉप प्रक्रिया अगर मौजूद है [बिक्री]। .StockItemID विकल्प (QUERYTRACEON 8649); ENDENDफिर, निम्न कोड के साथ एक .cmd फ़ाइल बनाएँ:
प्रारंभ sqlcmd -S WIN2016\SQL2017 -d WideWorldImporters -q"EXECUTE [बिक्री]।[OrderInfo];"
बाहर निकलेंयह हमें नहीं की अनुमति देता है प्रबंधन स्टूडियो के अंदर SP चलाएँ, जो महत्वपूर्ण ASYNC_NETWORK_IO प्रतीक्षा करता है; हम समानता से संबंधित प्रतीक्षा देखना चाहते हैं। .cmd फ़ाइल सहेजें, फिर चलाने के लिए डबल-क्लिक करें। आप एकाधिक फ़ाइलें चलाकर अतिरिक्त भार उत्पन्न कर सकते हैं। इस परिदृश्य के साथ हम मुख्य रूप से इस क्वेरी से संबंधित प्रतीक्षा देखेंगे, क्योंकि हमारे पास कोई अन्य कार्यभार नहीं है। यदि आप और भी अधिक प्रतीक्षा डेटा उत्पन्न करना चाहते हैं, तो एक साथ वाइडवर्ल्डइम्पोर्टर्स डेटाबेस के विरुद्ध अन्य प्रश्नों को निष्पादित करने के लिए स्वतंत्र महसूस करें।
कई मिनटों के बाद, कमांड फाइलों को रोकें और क्वेरी स्टोर फ़ोल्डर और नीचे की रिपोर्ट देखने के लिए प्रबंधन स्टूडियो के भीतर वाइडवर्ल्ड इम्पोर्टर्स डेटाबेस का विस्तार करें। यदि आप शीर्ष संसाधन उपभोग क्वेरी रिपोर्ट खोलते हैं, तो आपको संग्रहीत कार्यविधि क्वेरी को शीर्ष क्वेरी के रूप में देखना चाहिए।
इस रिपोर्ट के लिए डिफ़ॉल्ट दृश्य उच्चतम कुल अवधि वाली क्वेरी दिखाता है। प्रतीक्षा आंकड़ों के आधार पर प्रश्नों को देखने के लिए, हम कॉन्फ़िगर करें बटन का चयन कर सकते हैं और इसे प्रतीक्षा समय (एमएस) में बदल सकते हैं।
रिपोर्ट दृश्य में बटन कॉन्फ़िगर करें (ऊपर दाएं) रिपोर्ट के लिए संसाधन बदलना ध्यान दें कि आप समय अंतराल और लौटाए गए प्रश्नों की संख्या को भी कॉन्फ़िगर कर सकते हैं। इस उदाहरण के लिए, अंतिम घंटा स्वीकार्य है।यदि आप पहली क्वेरी के लिए बार पर होवर करते हैं, तो आप क्वेरी के लिए प्रतीक्षा समय देख सकते हैं। यह दृश्य वर्तमान में UI में प्रतीक्षा जानकारी देखने का एकमात्र तरीका है, लेकिन प्रतीक्षा आँकड़ों के लिए विशिष्ट अतिरिक्त रिपोर्ट प्रबंधन स्टूडियो के भविष्य के रिलीज़ में आने की उम्मीद है।
यूआई में जानकारी की प्रतीक्षा करें
आप में से जिन्होंने कुछ समय के लिए प्रतीक्षा आँकड़ों के साथ काम किया है, वे देखेंगे कि प्रतीक्षा प्रकार के विवरण भिन्न हैं। यही है, समानता को इंगित करने के लिए CXPACKET प्रतीक्षा प्रकार के बजाय, आप बस "समानांतर प्रतीक्षा प्रकार" देखते हैं। क्वेरी स्टोर में यह एक मूलभूत अंतर है:प्रतीक्षा प्रकारों को श्रेणियों में बांटा गया है। इस समय SQL सर्वर में 900 से अधिक विभिन्न प्रतीक्षा प्रकार हैं, और प्रत्येक को अलग-अलग ट्रैक करने का प्रयास करना बेहद महंगा है। इसके अलावा, क्वेरी स्टोर को सभी डेटा पेशेवरों को ध्यान में रखकर डिज़ाइन किया गया था - चाहे आप प्रदर्शन ट्यूनिंग के विशेषज्ञ हों या SQL सर्वर कैसे काम करता है, यह समझने के साथ शुरुआत कर रहे हों, आपको खराब प्रदर्शन करने वाली क्वेरी को आसानी से खोजने के लिए क्वेरी स्टोर का उपयोग करने में सक्षम होना चाहिए। इसका मतलब यह भी है कि प्रतीक्षा जानकारी को समझना आसान हो जाता है। प्रतीक्षा श्रेणियों और प्रतीक्षा प्रकारों की पूरी सूची के लिए, कृपया sys.query_store_wait_stats के दस्तावेज़ देखें।
आप टी-एसक्यूएल का उपयोग करके प्रतीक्षा जानकारी भी देख सकते हैं। एक उदाहरण क्वेरी नीचे दी गई है, जिसमें क्वेरी, उस क्वेरी के लिए plan_id(s) और दिए गए समय के अंतराल के लिए प्रतीक्षा आंकड़े शामिल हैं:
चुनें शीर्ष (10) [डब्ल्यूएस]। [प्रतीक्षा_श्रेणी_desc], [डब्ल्यूएस]। [avg_query_wait_time_ms], [डब्ल्यूएस]। ].[start_time], [rsi]। ]शामिल हों [sys]। ].[plan_id]शामिल हों [sys]। [query_store_runtime_stats_interval] [rsi] ऑन [rs]।[runtime_stats_interval_id] =[rsi]। ] =[rs]। [execution_type] =0ORDER BY [ws].[avg_query_wait_time_ms] DESC;क्वेरी आउटपुट
जबकि अब आप किसी दिए गए प्रश्न और उसकी योजना के लिए सभी प्रतीक्षा देख सकते हैं, फिर भी आपको यह समझने के लिए प्रदर्शन में और खुदाई करनी होगी, उदाहरण के लिए, एक क्वेरी समानांतर में क्यों चल रही है (जब शायद आप इसे नहीं चाहते हैं) या एक प्रश्न को अवरुद्ध करने वाला क्या हो सकता है। ध्यान दें कि प्रतीक्षा आंकड़े, रनटाइम आंकड़ों की तरह, समय के साथ क्वेरी योजना से जुड़े होते हैं। इस आउटपुट में, क्वेरी स्टोर के लिए अंतराल की लंबाई 10 मिनट के लिए सेट की गई है, इसलिए प्रतीक्षा के आंकड़े उस 10-मिनट के अंतराल (21 नवंबर, 2017 को 11:50 अपराह्न से 22 नवंबर, 2017 की मध्यरात्रि तक) के लिए प्रत्येक योजना के लिए हैं। डिफ़ॉल्ट रूप से जब आप क्वेरी स्टोर को सक्षम करते हैं तो अंतराल की लंबाई 60 मिनट होती है।
सारांश
व्यक्तिगत क्वेरी योजनाओं के साथ संयुक्त प्रतीक्षा आँकड़े, समस्या निवारण प्रणाली और क्वेरी प्रदर्शन के दौरान क्वेरी स्टोर को और भी अधिक दुर्जेय उपकरण बनाते हैं। क्वेरी स्टोर एकमात्र ऐसी सुविधा है जो आपको एक ही स्थान पर क्वेरी, योजना, प्रदर्शन मेट्रिक्स और प्रतीक्षा के आंकड़ों को मूल रूप से कैप्चर करने की अनुमति देती है। आप में से उन लोगों के लिए जो प्रतीक्षा प्रकार के असंख्य हैं, क्वेरी स्टोर में उपयोग की जाने वाली श्रेणियों में समायोजन सहज होना चाहिए। किसी भी नए व्यक्ति के लिए आँकड़ों की प्रतीक्षा करने के लिए, श्रेणियां उस संसाधन को समझने के लिए एक बेहतरीन जगह हैं जिसके लिए एक क्वेरी प्रतीक्षा कर रही है।