Database
 sql >> डेटाबेस >  >> RDS >> Database

यूडीएफ के लिए शोप्लान संवर्द्धन

Microsoft पिछले कुछ रिलीज़ में SQL सर्वर के लिए ShowplanXML आउटपुट की सामग्री को बढ़ा रहा है और SQL Server 2017 CU3 में, उन्होंने XML आउटपुट के QueryTimeStats नोड में उपयोगकर्ता-परिभाषित फ़ंक्शन (UDF) निष्पादन आँकड़े पेश किए। इसे वास्तविक निष्पादन योजनाओं के लिए सर्विस पैक 2 में SQL Server 2016 में वापस पोर्ट किया गया था। यह सुविधा आपको किसी क्वेरी की प्रदर्शन विशेषताओं के हिस्से के रूप में स्केलर यूडीएफ निष्पादन के प्रभाव को निश्चित रूप से जानने की अनुमति देती है। हालाँकि, इस सुविधा का उपयोग करने के साथ एक दिलचस्प पकड़ जुड़ी हुई है; आपको SQL सर्वर प्रबंधन स्टूडियो के अद्यतित संस्करण का उपयोग करके या SentryOne Plan Explorer का उपयोग करके वास्तविक निष्पादन योजना एकत्र करनी होगी, या जानकारी निष्पादन योजना से हटा दी जाएगी।

विभिन्न SSMS संस्करणों में योजनाओं की तुलना करना

मैंने हाल ही में शिकागो में प्लान कैश का उपयोग करके क्वेरी प्रदर्शन ट्यूनिंग पर एक उपयोगकर्ता समूह सत्र प्रस्तुत किया था और सत्र के दौरान मैं उस समय SQL सर्वर प्रबंधन स्टूडियो की नवीनतम रिलीज़ संस्करण 17.5 का उपयोग कर रहा था। उस समय मैंने हाल ही में अपने VM को SQL Server 2016 सर्विस पैक 2 में अपडेट किया था, इसलिए मैंने वास्तविक शोप्लान QueryTimeStats में नई UdfElapsedTime और UdfCpuTime जानकारी का प्रदर्शन किया और thm के बारे में एक लेख लिखने के लिए अपने लिए एक नोट बनाया। जब मैं वास्तव में इस लेख को शुरू करने के लिए वापस आया, ठीक उसी वीएम पर ठीक उसी क्वेरी का उपयोग करके, मैं एक वास्तविक निष्पादन योजना उत्पन्न नहीं कर सका जिसमें बार-बार प्रयासों के बावजूद UdfElapsedTime या UdfCpuTime जानकारी शामिल थी। मैं यह पता नहीं लगा सका कि मैं क्या गलत कर रहा था, और यह पता चला कि समस्या की जड़ यह थी कि मैंने SQL सर्वर प्रबंधन स्टूडियो 17.5 के बजाय गलती से SQL सर्वर प्रबंधन स्टूडियो 2016 लॉन्च कर दिया था। जब मैंने SSMS 17.5 में वही क्वेरी चलाई तो मुझे अचानक UdfElapsedTime और UdfCpuTime जानकारी वापस मिल गई। दोनों SSMS संस्करणों से लौटाए गए XML के उदाहरणों के लिए नीचे देखें:

एसएसएमएस से शोप्लान एक्सएमएल 17.5

एसएसएमएस से शोप्लान एक्सएमएल 2016 - WaitStats और QueryTimeStats को पूरी तरह से हटा दिया गया है

मैंने सर्वर से क्लाइंट को भेजे जा रहे टीडीएस पैकेट को कैप्चर करने के लिए SQL सर्वर 2016 SP2 इंस्टेंस के विरुद्ध SSMS 2016 चलाने वाले क्लाइंट के बीच पोर्ट 1433 पर नेटवर्क ट्रैफ़िक का एक TCP ट्रेस बनाने के लिए Microsoft संदेश विश्लेषक का उपयोग किया। इससे पता चलता है कि सर्वर द्वारा लौटाए गए शोप्लानएक्सएमएल में क्वेरीटाइमस्टैट्स जानकारी शामिल है, भले ही यह एसएसएमएस 2016 में शोप्लानएक्सएमएल में प्रकट नहीं होता है, इसलिए क्लाइंट वास्तव में किसी भी फ़ील्ड को अलग कर रहा है जो क्लाइंट के साथ भेजे गए स्कीमा परिभाषा में शामिल नहीं है।

संदेश ऑफ़सेट:1635
<.Q.u.e.r.y.T.i.m.e.S.t.a.t.s. .ई.एल.ए.पी.एस.ई.डी.टी.आई.एम.ई.=.".2.6.7.". .सी.पी.यू.टी.आई.एम.ई.=.".2.6.7.". यू.डी.एफ.ई.एल.ए.पी.एस.ई.डी.टी.आई.एम.ई.=.".2.1.5.". यू.डी.एफ.सी.पी.यू.टी.आई.एम.ई.=.".2.1.5".>.<./.Q.u.e.er.y.T.i.m.e.S.t.a.t.s.>

यह .sqlplan फ़ाइलों के साथ देखने के लिए कुछ है जो SSMS के पुराने क्लाइंट संस्करणों और/या निष्पादन योजनाओं का उपयोग करके उत्पन्न होते हैं जिन्हें SSMS के पुराने संस्करण से सहेजा या कॉपी किया जाता है, जो कि अक्सर ऐसा होता है जब मैं क्लाइंट्स के साथ काम कर रहा होता हूं ईमेल।

SSMS में, ग्राफिकल निष्पादन योजना को देखने से आपको क्वेरी में स्केलर उपयोगकर्ता-परिभाषित फ़ंक्शन निष्पादन के प्रदर्शन प्रभाव का कोई संकेत नहीं मिलता है:

यदि हम प्रदर्शन के अपने विश्लेषण को प्रत्येक ऑपरेटर की लागत पर सख्ती से आधारित करते हैं, तो फ़ंक्शन निष्पादन के लिए कंप्यूट स्केलर प्रदर्शन पर महत्वपूर्ण प्रभाव की तरह नहीं दिखता है। ऑपरेटरों के लिए टूल टिप्स भी जानकारी को अमल में नहीं लाते हैं या उपयोगकर्ता द्वारा परिभाषित फ़ंक्शन के प्रभाव के बारे में कोई चेतावनी नहीं देते हैं। एसएसएमएस के भीतर केवल वही स्थान है जो वर्तमान में योजना के एक्सएमएल में है, या योजना के चयन रूट ऑपरेटर के लिए गुण विंडो में है, जैसा कि नीचे दिखाया गया है:

हालांकि यहां जानकारी का उपयोग करते हुए, हम देख सकते हैं कि UdfCpuTime कुल CpuTime का 85.79% है और UdfElapsedTime क्वेरी के निष्पादन के लिए कुल ElapsedTime का 64.44% है। ऊपर नीला), और बीता हुआ समय और UdfElapsedTime)।

योजनाओं को पुनः प्राप्त करने के लिए SentryOne Plan Explorer का उपयोग करना

SQL सर्वर प्रदर्शन ट्यूनिंग में मदद करने के लिए मेरे पसंदीदा मुफ्त टूल में से एक सेंट्रीऑन प्लान एक्सप्लोरर है, और लंबे समय से प्लान एक्सप्लोरर की विशेषताओं में से एक कमांड टेक्स्ट को एक नई विंडो में पेस्ट करके वास्तविक निष्पादन योजना उत्पन्न करने की क्षमता है। वास्तविक योजना प्राप्त करें बटन पर क्लिक करें, जैसा कि नीचे दिखाया गया है।

चूंकि प्लान एक्सप्लोरर शोप्लानएक्सएमएल को पढ़ता है क्योंकि यह SQL सर्वर इंजन द्वारा प्रदान किया गया है, इसमें QueryTimeStats में उन्नत जानकारी भी शामिल होगी। हालांकि, यदि आप प्रबंधन स्टूडियो के पुराने संस्करण से सहेजी गई निष्पादन योजना खोलते हैं, या यदि आप प्लान एक्सप्लोरर में योजना देखने के लिए पुराने संस्करण में एसएसएमएस के लिए प्लान एक्सप्लोरर एडिन का उपयोग करते हैं, तो उन्नत जानकारी नहीं दिखाई जाएगी।

प्लान एक्सप्लोरर में परिणाम टैब के स्टेटमेंट ग्रिड को ग्रिड में मौजूदा कॉलम के साथ यूडीएफ अवधि और यूडीएफ सीपीयू कॉलम जोड़ने के लिए कॉलम चयनकर्ता का उपयोग करके अपडेट किया जा सकता है, जिससे यह देखना आसान हो जाता है कि उपयोगकर्ता द्वारा परिभाषित फ़ंक्शन निष्पादन कहां प्रभाव डाल रहा है बड़े बहु-कथन बैचों के लिए। प्लान एक्सप्लोरर इन कॉलमों की हाइलाइटिंग भी प्रदान करता है जब वे समग्र सीपीयू और/या अवधि का एक महत्वपूर्ण हिस्सा होते हैं जैसा कि नीचे दिखाया गया है।

प्लान एक्सप्लोरर में प्लान डायग्राम की जानकारी को भी बढ़ाया गया है। CPU + I/O द्वारा लागत और फिर CPU द्वारा लागत का उपयोग करने वाले चित्र यहां दिए गए हैं:

लागत का उपयोग करते हुए योजना आरेख CPU + I/O द्वारा

लागत का उपयोग करते हुए योजना आरेख सीपीयू द्वारा

रूट सेलेक्ट ऑपरेटर पर अतिरिक्त चेतावनियां होती हैं जब उपयोगकर्ता द्वारा परिभाषित कार्यों के निष्पादन आंकड़े इंगित करते हैं कि वे समग्र सीपीयू और/या समग्र अवधि का एक महत्वपूर्ण हिस्सा हैं:

रूट के लिए टूलटिप ऑपरेटर चुनें

कंप्यूट स्केलर ऑपरेटर के पास ऑपरेशन द्वारा संसाधित की जा रही पंक्ति गणना के आधार पर प्लान एक्सप्लोरर में एक चेतावनी भी है, यहां तक ​​कि उन योजनाओं के लिए भी जिनमें शोप्लानएक्सएमएल के लिए एन्हांसमेंट शामिल नहीं हैं:

गणना के लिए टूलटिप अदिश संचालिका

सीपीयू द्वारा लागत दिखाने से उन ऑपरेटरों की पहचान करने में मदद मिल सकती है जिनके पास छिपी हुई सीपीयू लागत है जो I/O द्वारा डूब सकती है। सीपीयू या आई/ओ के अपने आप समस्या निवारण के लिए दृश्य को थोड़ा शिफ्ट करने की यह क्षमता प्लान एक्सप्लोरर और एसएसएमएस के बीच कई अंतरों में से एक है। यहाँ आरेख का संदर्भ मेनू है जहाँ आप इस दृश्य को बदल सकते हैं:

निष्कर्ष

SQL सर्वर में शोप्लान XML में एन्हांसमेंट SQL सर्वर 2016 सर्विस पैक 2 और SQL सर्वर 2017 संचयी अद्यतन 3 में क्वेरी प्रदर्शन पर स्केलर उपयोगकर्ता-परिभाषित फ़ंक्शन के समग्र प्रभाव को निर्धारित करना बहुत आसान बनाता है, जब तक आप अधिक उपयोग कर रहे हैं निष्पादन योजना को पुनः प्राप्त करने के लिए क्लाइंट टूल या प्लान एक्सप्लोरर का नवीनतम संस्करण।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. बड़े आकार के डेटाबेस प्रबंधन प्रणाली:डिजाइन और वास्तुकार

  2. आरडीबीएमएस बनाम नोएसक्यूएल

  3. SQL के साथ टेबल और कॉलम कैसे ड्रॉप करें

  4. QUOTENAME फ़ंक्शन के साथ डायनामिक पिवट टेबल बनाना

  5. SQLCMD का उपयोग करके SQL डेटाबेस रखरखाव कार्यों को स्वचालित कैसे करें