परिचय
क्वेरी स्टोर एक नई सुविधा है, जिसे SQL सर्वर 2016 में पेश किया गया है, जो डेटाबेस प्रशासकों को SQL सर्वर प्रबंधन स्टूडियो में उपलब्ध GUI का उपयोग करके ऐतिहासिक रूप से प्रश्नों और उनकी संबंधित योजनाओं की समीक्षा करने की अनुमति देता है, साथ ही कुछ गतिशील प्रबंधन दृश्यों का उपयोग करके क्वेरी प्रदर्शन का विश्लेषण करने की अनुमति देता है। क्वेरी स्टोर एक डेटाबेस स्कोप्ड कॉन्फ़िगरेशन विकल्प है और उपयोग के लिए उपलब्ध है यदि विचाराधीन डेटाबेस का संगतता स्तर 130 है।
क्वेरी स्टोर Oracle डेटाबेस प्लेटफॉर्म में स्वचालित वर्कलोड रिपोजिटरी (AWR) जैसी तकनीकों के समान है। एडब्ल्यूआर क्वेरी स्टोर से भी बड़े पैमाने पर प्रदर्शन आंकड़ों को कैप्चर करता है और डेटाबेस व्यवस्थापक को ऐतिहासिक रूप से प्रदर्शन का विश्लेषण करने की अनुमति देता है। अवधारण अवधि और एकत्र किए गए डेटा की भंडारण सीमा जैसी अवधारणाएं AWR आर्किटेक्चर में उपलब्ध हैं क्योंकि वे क्वेरी स्टोर में हैं। क्वेरी स्टोर को सक्षम करते समय निम्नलिखित प्रमुख कॉन्फ़िगरेशन विकल्प उपलब्ध होते हैं:
- ऑपरेशन मोड: यह निर्धारित करता है कि क्वेरी स्टोर नए कैप्चर किए गए डेटा (रीडराइट मोड) को स्वीकार करेगा या केवल रिपोर्ट के लिए उपलब्ध पुराने डेटा को स्टोर करेगा (रीड-ओनली मोड)
- डेटा फ्लश अंतराल: निर्धारित करता है कि कितनी बार क्वेरी स्टोर मेमोरी बफ़र्स को डिस्क पर फ़्लश किया जाता है। याद रखें कि क्वेरी स्टोर डेटा डेटाबेस में संग्रहीत होता है जहां क्वेरी स्टोर सक्षम होता है। डिफ़ॉल्ट मान 15 मिनट है।
- सांख्यिकी संग्रहण अंतराल: निर्धारित करता है कि क्वेरी स्टोर रनटाइम आंकड़े कितनी बार एकत्र किए जाते हैं।
- अधिकतम आकार: यह निर्धारित करता है कि क्वेरी स्टोर के आंकड़ों का भंडार कितना बढ़ सकता है। डिफ़ॉल्ट रूप से, यह 100MB है।
- क्वेरी स्टोर कैप्चर मोड: क्वेरी कैप्चर की ग्रैन्युलैरिटी निर्धारित करता है। ALL, AUTO, और NONE उपलब्ध विकल्प हैं। डिफ़ॉल्ट मान ऑटो है।
- आकार आधारित सफाई मोड: निर्धारित करता है कि अधिकतम आकार तक पहुंचने पर क्वेरी स्टोर पुराने डेटा को फ्लश करेगा या नहीं।
- पुरानी क्वेरी सीमा: उन दिनों की संख्या निर्धारित करता है, जिनके लिए क्वेरी स्टोर डेटा बनाए रखता है। डिफ़ॉल्ट मान तीस दिनों पर सेट है।
चित्र 2 क्वेरी स्टोर विकल्प
क्वेरी स्टोर एक डेटाबेस स्कोप्ड फीचर है जिसे या तो GUI (SQL सर्वर मैनेजमेंट स्टूडियो) का उपयोग करके या निम्न कमांड चलाकर सक्षम किया जा सकता है:
डेटाबेस बदलें [WideWorldImporters] SET QUERY_STORE =ON;
क्वेरी स्टोर द्वारा एकत्रित क्वेरी टेलीमेट्री डेटाबेस के भीतर सिस्टम तालिकाओं में संग्रहीत की जाती है जहां क्वेरी स्टोर सक्षम किया गया है।
नमूना क्वेरी और डिफ़ॉल्ट रिपोर्ट
अब तक मैंने जो कुछ भी लिखा है वह कई अन्य स्रोतों से उपलब्ध है; उनमें से कुछ संदर्भ अनुभाग में पाए जा सकते हैं।
इस खंड में, हम इस बात पर थोड़ा गहराई से विचार करेंगे कि सरल उदाहरणों का उपयोग करके इसे सक्षम करने के बाद हम वास्तव में क्वेरी स्टोर के साथ क्या कर सकते हैं। आइए निम्नलिखित दो प्रश्नों पर विचार करें:
सूची 1:विशिष्ट फ़िल्टर का उपयोग करके रिकॉर्ड प्राप्त करना
WideWorldImportersgoselecta.ContactPersonID,a.OrderDate,a.DeliveryMethodID,a.Comments,b.OrderedOutersfromPurchasing.PurchaseOrders ainner Purchasing.PurchaseOrderLines bon a.PurchaseOrderID'=b.SuplierReference a.PurchaseOrderID'=b. पूर्व>लिस्टिंग 2:रेंज का उपयोग करके रिकॉर्ड्स फ़ेच करना
WideWorldImportersgoselecta.ContactPersonID,a.OrderDate,a.DeliveryMethodID,a.Comments,b.OrderedOuters fromPurchasing.PurchaseOrders ainner Purchasing.PurchaseOrderLines bon a.PurchaseOrderLines. /पूर्व>अपर केस में लिखे गए इन प्रश्नों के वैकल्पिक संस्करण पर ध्यान दें:
सूची 1:विशिष्ट फ़िल्टर (अपर केस) का उपयोग करके रिकॉर्ड प्राप्त करना
उपयोग WIDEWORLDIMPORTERSGOSELECTA.CONTACTPERSONID,A.ORDERDATE,A.DELIVERYMETHODID,A.COMMENTS,B.ORDEREDOUTERSFROMPURCHASING.PURCHASEORDERS AINNER JOIN PURCHASING.PURCHASEORDERLINES BON A.PURCHASEORDERLINES B. पूर्व>लिस्टिंग 2:रेंज (अपर केस) का उपयोग करके रिकॉर्ड्स प्राप्त करना
WIDEWORLDIMPORTERSGOSELECTA.CONTACTPERSONID,A.ORDERDATE,A.DELIVERYMETHODID,A.COMMENTS,B.ORDEREDOUTERSFROMPURCHASING का उपयोग करें। PURCHASEORDERS AINNER खरीद में शामिल हों। /पूर्व>जैसा कि आप देख सकते हैं, हमने GO कीवर्ड का उपयोग करके इन प्रश्नों को कई बार चलाया। इस प्रकार, हमारे पास काम करने के लिए कुछ उचित मात्रा में डेटा है। प्रदर्शन का विश्लेषण करने के लिए क्वेरी स्टोर का उपयोग करते समय हमें सबसे पहली बात यह जाननी चाहिए कि SQL सर्वर 2016 क्वेरी स्टोर में छह डिफ़ॉल्ट रिपोर्ट बनाई गई हैं जैसा कि चित्र 3 में दिखाया गया है।
चित्र 3 क्वेरी स्टोर रिपोर्ट
रिपोर्ट के नाम पिछले लेखों के साथ-साथ Microsoft दस्तावेज़ीकरण में विवरण में वर्णित हैं। इन रिपोर्टों द्वारा प्रदान किया गया डेटा नीचे सूचीबद्ध प्रमुख गतिशील प्रबंधन दृश्यों से पुनर्प्राप्त किया गया है:
योजना आँकड़े DMV
- sys.query_store_query_text - डेटाबेस के खिलाफ निष्पादित अद्वितीय क्वेरी टेक्स्ट शामिल हैं
- sys.query_store_plan - संकलन समय के आँकड़ों के साथ क्वेरी के लिए अनुमानित योजना शामिल है
- sys.query_context_settings - योजना के कुछ अनूठे संयोजन शामिल हैं जो सेटिंग्स को प्रभावित करते हैं जिसके तहत क्वेरी निष्पादित की जाती हैं
- sys.query_store_query - क्वेरी प्रविष्टियां जिन्हें क्वेरी स्टोर में अलग से ट्रैक किया जाता है और मजबूर किया जाता है
रन टाइम आंकड़े डीएमवी
- sys.query_store_runtime_stats_interval - क्वेरी स्टोर समय को स्वचालित रूप से उत्पन्न समय विंडो (अंतराल) में विभाजित करता है और प्रत्येक निष्पादित योजना के लिए उस अंतराल पर एकत्रित आंकड़े संग्रहीत करता है
- sys.query_store_runtime_stats - निष्पादित योजनाओं के लिए समेकित रनटाइम आंकड़े शामिल हैं
इन DMVs का उपयोग करने के तरीके के बारे में अधिक विवरण संदर्भित Microsoft Documentation में उपलब्ध हैं। इस लेख में, हम ज्यादातर GUI का ही उपयोग करेंगे।
जैसा कि आप चित्र 4 से देख सकते हैं, हम समग्र संसाधन खपत रिपोर्ट की समीक्षा करते हैं, जबकि अगले भाग में, हम उन प्रश्नों को सीमित करने जा रहे हैं जिन्हें हमने पहले सूचीबद्ध किया था और डेटा हम इन सरल प्रश्नों से प्राप्त कर सकते हैं।
चित्र 4 समग्र संसाधन खपत रिपोर्ट
GUI का उपयोग करके प्रश्नों का विश्लेषण करना
क्वेरी स्टोर रिपोर्ट का उपयोग करते समय कुछ प्रमुख बातों को सहायक माना जाना चाहिए:
- आप चित्र 4 में हाइलाइट किए गए बटन पर क्लिक करके पर्यावरण को कॉन्फ़िगर कर सकते हैं। चित्र 5 हमें उन विवरणों को दिखाता है जिन्हें हम अपने उपयोग के मामले में बदल सकते हैं:लौटाए जाने वाले डेटा के मानदंड, दिनांक सीमा, और लौटाए जाने वाले डेटा सेट। उदाहरण के लिए, यदि मैं उन प्रश्नों से जुड़ी क्वेरी आईडी स्पष्ट रूप से देखना चाहता हूं जिनकी मैं समीक्षा कर रहा हूं, उदाहरण के लिए, मैं अपने डेटा सेट को डिफ़ॉल्ट शीर्ष 25 से शीर्ष 10 तक कम करना चाहता हूं।
चित्र 5 रिपोर्ट कॉन्फ़िगरेशन विकल्प
चित्र 6 शीर्ष 25 प्रश्न 1 मई 2018 को निष्पादित किए गए
चित्र. 7 शीर्ष 10 प्रश्न 1 मई 2018 को निष्पादित किए गए
- बार चार्ट ज्यादातर समय के साथ एक्स-अक्ष पर डेटा प्रदर्शित करते हैं लेकिन आप क्वेरी आईडी के आधार पर डेटा देखने के लिए एक विशिष्ट डेटा बिंदु को ड्रिल कर सकते हैं। प्रत्येक क्वेरी आईडी एक विशिष्ट क्वेरी निर्धारित करती है। यह ध्यान रखना महत्वपूर्ण है कि टेक्स्ट को हैश करके क्वेरी को विशिष्ट रूप से पहचाना जाता है। इस प्रकार, निचले मामले में एक क्वेरी ऊपरी मामले में एक ही क्वेरी से भिन्न होती है। यह एक सामान्य ज्ञान होना चाहिए:तदर्थ प्रश्न योजना कैश के लिए एक चिंता का विषय हैं और वे अंतरिक्ष उपयोग और उचित विश्लेषण दोनों के मामले में क्वेरी स्टोर के लिए भी खराब हैं।
अंजीर। 8 लिस्टिंग 1 में क्वेरी (लोअर केस, क्वेरी 42480)
चित्र 9 लिस्टिंग 3 में प्रश्न (अपर केस, क्वेरी 42490)
- तीसरा महत्वपूर्ण अवलोकन यह तथ्य है कि जब किसी डेटा बिंदु को हरे रंग में हाइलाइट किया जाता है, तो निचले फलक में दिखाई गई विस्तृत निष्पादन योजना उस डेटा बिंदु से संबंधित होती है। चित्र 7 में, यह डेटा बिंदु क्वेरी आईडी 42481 को संदर्भित करता है जिसे हमने पहले निष्पादित किया था (पूरी क्वेरी लिस्टिंग 2 में दिखाई गई है)। इस डेटा बिंदु पर हमारे माउस को मँडराते हुए क्वेरी, इसकी आईडी और इस क्वेरी से जुड़ी योजनाओं की संख्या प्रदर्शित होती है (चित्र 8 देखें)।
चित्र 10 प्रश्न 42481 विवरण
हमारी क्वेरी को 1391 बार निष्पादित किया गया था क्योंकि यह क्वेरी स्टोर द्वारा सटीक रूप से कैप्चर की गई थी और चित्र 10 में बार चार्ट के y-अक्ष (निष्पादन गणना) में प्रदर्शित की गई थी। रिपोर्ट तब खींची जा रही थी जब बैच अभी भी निष्पादित हो रहा था। इस प्रकार, हमारे पास पूर्ण गणना (1500) नहीं है जो हमें सूचित करती है कि हर बार एक क्वेरी निष्पादित होने पर डेटा का वास्तविक समय पर कब्जा होता है। दाईं ओर, हम यह भी देखते हैं कि योजना का उपयोग इन बहु-कार्यान्वयन के लिए किया जा रहा है (योजना 675)। हम लिस्टिंग 5 में दी गई क्वेरी का उपयोग करके इसे सत्यापित कर सकते हैं।
सूची 5
WideWorldImporters का उपयोग करेंGOSELECT Txt.query_text_id, Txt.query_sql_text, Pl.plan_id, Qry.*FROM sys.query_store_plan AS PlJOIN sys.query_store_query AS Qry ON Pl.query_id =Qry.query_idJOIN_sys. .query_text_idwhere Qry.query_id=42481;
चित्र 11 डीएमवी से क्वेरी आईडी और प्लान आईडी
थोड़ा सा ट्यूनिंग
आइए एक और प्रश्न पर एक नजर डालते हैं।
जब हम लिस्टिंग 6 में क्वेरी चलाते हैं और क्वेरी स्टोर से विवरण की जांच करते हैं, तो निष्पादन योजना विवरण से पता चलता है कि हमें 51% सुधार प्राप्त करने के लिए एक इंडेक्स की आवश्यकता है।
लिस्टिंग 6:उप-इष्टतम क्वेरी
चुनें टॉप (1000) [ऑर्डरलाइन आईडी], [ऑर्डरआईडी], [स्टॉकआइटम आईडी], [विवरण], [पैकेज टाइप आईडी], [मात्रा], [यूनिटप्राइस], [टैक्सरेट], [पिकडक्वांटिटी], [पिकिंग कम्प्लीटेडव्हेन], [लास्ट एडिटेडबी ] ,[LastEditedwhen] FROM [WideWorldImporters].[Sales].[OrderLines] जहां UnitPrice> 1000 GO 2000
चित्र 12 उप-इष्टतम क्वेरी विवरण
चित्र 13 उप-इष्टतम क्वेरी निष्पादन योजना
एक बार जब हम लिस्टिंग 7 में दिए गए कथन का उपयोग करके अनुशंसित इंडेक्स बना लेते हैं, तो हम क्वेरी ऑप्टिमाइज़र को एक नई निष्पादन योजना बनाने के लिए प्रेरित करते हैं। इस मामले में, नई निष्पादन योजना से प्रदर्शन में सुधार की उम्मीद है। हालांकि, ऐसे मामले हैं जहां कुछ बदलाव खराब प्रदर्शन का कारण बन सकते हैं जैसे डेटा वॉल्यूम में महत्वपूर्ण परिवर्तन जो आंकड़ों को प्रभावी ढंग से अमान्य करते हैं या इंडेक्स की संख्या को कम करते हैं और इसी तरह। कहा जाता है कि इस तरह के प्रश्नों के प्रदर्शन में वापसी हुई है और क्वेरी स्टोर में रिग्रेस्ड क्वेरी रिपोर्ट का उपयोग करके जांच की जा सकती है।
सूची 7:अनुक्रमणिका निर्माण
उपयोग [वाइडवर्ल्ड आयातकों] गैर-अनुक्रमित सूचकांक [कस्टम_IX_UnitPrice] [बिक्री] पर बनाएं। ], [टैक्स रेट], [पिकडक्वांटिटी], [पिकिंग कम्पलीटेडव्हेन], [लास्ट एडिटेड द्वारा], [लास्ट एडिटेडव्हेन]) गो
चित्र 14 अनुकूलित क्वेरी (निष्पादन योजना में परिवर्तन)
चित्र 15 अनुकूलित क्वेरी (दो योजनाएं)
चित्र 16 अनुकूलित क्वेरी (बल योजना)
जब चित्र 14 और चित्र 16 में दिखाए गए अनुसार क्वेरी के लिए कई योजनाएँ होती हैं, तो हम ऑप्टिमाइज़र को हमेशा उस योजना का उपयोग करने के लिए कह सकते हैं जिसे हम फोर्स प्लान बटन पर क्लिक करके चुनते हैं। SQL सर्वर के पिछले संस्करणों में यह थोड़ा कठिन काम था।
जैसा कि आप चित्र 17 से देख सकते हैं, क्वेरी स्टोर हमें कई मीट्रिक का उपयोग करके क्वेरी से संबद्ध विभिन्न योजनाओं की तुलना करने की अनुमति देता है।
चित्र 17 निष्पादन योजनाओं की तुलना करना
फिर से, हम डीएमवी का उपयोग करके इस क्वेरी आईडी से जुड़ी योजनाओं को सत्यापित करने के लिए लिस्टिंग 8 में क्वेरी का उपयोग कर सकते हैं। (चित्र 11 देखें)
लिस्टिंग 8:क्वेरी 42497 से संबद्ध योजनाएं
WideWorldImporters का उपयोग करेंGOSELECT Txt.query_text_id, Txt.query_sql_text, Pl.plan_id, Qry.*FROM sys.query_store_plan AS PlJOIN sys.query_store_query AS Qry ON Pl.query_id =Qry.query_idJOIN_sys. .query_text_idwhere Qry.query_id=42497;
विविधताओं की खोज
एक और उपयोगी रिपोर्ट जो क्वेरी स्टोर हमें उपलब्ध कराती है, वह है उच्च विविधता वाली क्वेरीज़। यह रिपोर्ट हमें दिखाती है कि किसी निश्चित अवधि में किसी विशिष्ट क्वेरी के लिए वांछित मीट्रिक कितनी दूर हैं। यह प्रदर्शन के ऐतिहासिक विश्लेषण के लिए बहुत उपयोगी है। लिस्टिंग 9 में दिए गए कथनों का उपयोग करके, हम डेटा उत्पन्न करते हैं जो एक तस्वीर दे सकता है कि विविधताएं कैसी दिखेंगी। प्रक्रिया के चरण केवल एक छोटी तालिका बनाते हैं और फिर विभिन्न बैच आकारों का उपयोग करके रिकॉर्ड सम्मिलित करते हैं।
सूची 9:क्वेरी 42497 से संबद्ध योजनाएं
वाइडवर्ल्ड इम्पोर्टर्सगो का उपयोग करें-- एक टेबलक्रिएट टेबल टेबल बनाएं (आईडी इंट आइडेंटिटी (1000,1), फर्स्टनाम वर्कर (30), लास्टनाम वर्कर (30), कंट्रीकोड चार (2), हायरडेट डेटाटाइम 2 डिफॉल्ट गेटडेट ());-- विभिन्न आकारों के बैचों में रिकॉर्ड सम्मिलित करेंटेबलोन मानों में डालें ('केनेथ', 'इगिरी', 'एनजी', गेटडेट ()); GO 10000 टेबलोन मानों में डालें ('क्वामे', 'बोटेंग', 'जीएच', गेटडेट ());गो 10टेबलोन मानों में डालें ('फिलिप', 'ओनू', 'एनजी', गेटडेट ()); GO 100000 टेबलोन मानों में डालें ('क्वेसी', 'आर्माह', 'जीएच', गेटडेट ()); GO 100
क्वेरी स्टोर हमें उस क्वेरी के विशिष्ट निष्पादन अंतराल के लिए इन मेट्रिक्स के न्यूनतम और अधिकतम मान जैसे विवरण दिखाता है जिसमें हम रुचि रखते हैं। इस उदाहरण में, हम पाते हैं कि यह केवल प्रति निष्पादन बैचों की संख्या का परिणाम है (ध्यान दें कि पैरामीटर वास्तव में INSERT कथन को निष्पादित करने के लिए उपयोग किए जा रहे हैं)। उत्पादन में, इस तरह की विविधताओं के लिए अन्य कारक जिम्मेदार हो सकते हैं।
अंजीर। अवधि में 18 बदलाव
अंजीर। 19 तार्किक लेखन में भिन्नता
अंजीर। भौतिक पठन में 20 भिन्नता
निष्कर्ष
इस लेख में, हमने SQL सर्वर 2016 क्वेरी स्टोर GUI वातावरण की समीक्षा की है और कुछ चीजें जो हम क्वेरी स्टोर का उपयोग करके अपने उदाहरण (SQL के संबंध में) के प्रदर्शन के बारे में निकाल सकते हैं। इंटरनेट पर कई लेख हैं जो और भी अधिक उन्नत उपयोग के मामलों और आंतरिक की बहुत गहरी व्याख्या दिखाते हैं। यह लेख मध्य-स्तर के डीबीए के लिए अच्छे काम का होना चाहिए जो प्रदर्शन मूल्यांकन/ट्यूनिंग के लिए क्वेरी स्टोर का उपयोग करने में एक प्रमुख शुरुआत करना चाहते हैं।
संदर्भ
- क्वेरी स्टोर के साथ सर्वोत्तम अभ्यास
- Cristiman, L. (2016) क्वेरी स्टोर - सेटिंग्स और सीमाएं
- क्वेरी स्टोर का उपयोग करके प्रदर्शन की निगरानी करना
- क्वेरी स्टोर कैटलॉग दृश्य
- क्वेरी स्टोर संग्रहित प्रक्रियाएं
- क्वेरी स्टोर - यह कैसे काम करता है और इसका उपयोग कैसे करें
- क्वेरी स्टोर उपयोग परिदृश्य
- वैन डे लार, ई. (2016) SQL सर्वर 2016 क्वेरी स्टोर:क्वेरी स्टोर का उपयोग करके निष्पादन योजनाओं को बाध्य करना
उपयोगी टूल:
SQL सर्वर के लिए dbForge क्वेरी बिल्डर - उपयोगकर्ताओं को मैन्युअल कोड लेखन के बिना एक सहज दृश्य इंटरफ़ेस के माध्यम से त्वरित और आसानी से जटिल SQL क्वेरी बनाने की अनुमति देता है।