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

SQL सर्वर में निष्पादन योजनाओं की तुलना करें

डेटाबेस व्यवस्थापक हमेशा SQL सर्वर क्वेरी प्रदर्शन को ट्यून करने का प्रयास करता है। क्वेरी प्रदर्शन को ट्यून करने में पहला कदम क्वेरी की निष्पादन योजना का विश्लेषण करना है। कुछ शर्तों पर, SQL सर्वर क्वेरी ऑप्टिमाइज़र विभिन्न निष्पादन योजनाएँ बना सकता है। इस समय, मैं SQL सर्वर क्वेरी ऑप्टिमाइज़र के बारे में कुछ नोट्स जोड़ना चाहूंगा। SQL सर्वर क्वेरी ऑप्टिमाइज़र एक लागत-आधारित अनुकूलक है जो निष्पादन योजनाओं का विश्लेषण करता है और किसी क्वेरी के लिए इष्टतम निष्पादन योजना तय करता है। SQL सर्वर क्वेरी ऑप्टिमाइज़र के लिए महत्वपूर्ण कीवर्ड एक इष्टतम निष्पादन योजना है जो आवश्यक रूप से सर्वोत्तम निष्पादन योजना नहीं है। इसलिए, यदि SQL सर्वर क्वेरी ऑप्टिमाइज़र प्रत्येक क्वेरी के लिए सर्वोत्तम निष्पादन योजना का पता लगाने का प्रयास करता है, तो इसमें अतिरिक्त समय लगता है और यह SQL सर्वर इंजन के प्रदर्शन को नुकसान पहुंचाता है। SQL सर्वर 2016 में, Microsoft ने SQL सर्वर प्रबंधन स्टूडियो में एक नई क्षमता जोड़ी, जिसे शोप्लान की तुलना करें कहा जाता है। यह सुविधा हमें दो अलग-अलग निष्पादन योजनाओं की तुलना करने की अनुमति देती है। उसी समय, हम इस विकल्प का ऑफ़लाइन उपयोग कर सकते हैं जिसका अर्थ है कि हमें SQL सर्वर इंस्टेंस को कनेक्ट करने की आवश्यकता नहीं है। कल्पना कीजिए कि आप एक प्रश्न लिखते हैं और यह क्वेरी परीक्षण वातावरण में अच्छा प्रदर्शन करती है लेकिन PROD (उत्पादन वातावरण) में, यह बहुत खराब प्रदर्शन करती है। इस समस्या से निपटने के लिए, हमें निष्पादन योजनाओं की तुलना करने की आवश्यकता है। इस सुविधा से पहले, हम दो SQL सर्वर प्रबंधन स्टूडियो खोलते थे और निष्पादन योजनाओं को साथ-साथ लाते थे लेकिन यह तरीका बहुत असुविधाजनक था।

दो निष्पादन योजनाओं की तुलना कैसे करें?

इस प्रदर्शन में, हम एडवेंचरवर्क्स डेटाबेस का उपयोग करेंगे और दो निष्पादन योजनाओं की तुलना करेंगे, जिनमें कार्डिनैलिटी एस्टीमेशन मॉडल संस्करण अलग-अलग हैं और शोप्लान की तुलना करके इस अंतर का पता लगाएं।

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

 सोह का चयन करें। सेंट [नाम] एएस [बिक्री क्षेत्र], सोह। [SalesOrderHeader] सोह ऑन sp.[BusinessEntityID] =सोह। .[SalesPersonID] =e.[BusinessEntityID] इनर जॉइन [व्यक्ति]।[व्यक्ति] p ON p.[BusinessEntityID] =sp.[BusinessEntityID]

इस चरण में, हम अपनी पहली निष्पादन योजना को सहेजेंगे। निष्पादन योजना में कहीं भी राइट-क्लिक करें और निष्पादन योजना को इस रूप में सहेजें पर क्लिक करें और निष्पादन योजना को ExecutionPlan_CE140.sqlplan के रूप में सहेजें।

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

 सोह का चयन करें। सेंट [नाम] एएस [बिक्री क्षेत्र], सोह। [SalesOrderHeader] सोह ऑन sp.[BusinessEntityID] =सोह। .[SalesPersonID] =e.[BusinessEntityID] इनर जॉइन [व्यक्ति]। 

हम शोप्लान की तुलना करें . पर क्लिक करेंगे और पिछली निष्पादन योजना का चयन करें जिसे ExecutionPlan_CE140.sqlplan के रूप में सहेजा गया था।

निम्न छवि SQL सर्वर निष्पादन की पहली स्क्रीन को योजना की तुलना करती है और गुलाबी रंग हाइलाइट किए गए क्षेत्र समान संचालन को परिभाषित करते हैं।

यदि हम नीचे या ऊपर निष्पादन योजना स्क्रीन में किसी भी ऑपरेटर पर क्लिक करते हैं, तो SQL सर्वर प्रबंधन स्टूडियो अन्य समान ऑपरेटरों को हाइलाइट करता है। पैनल के दाईं ओर, आप गुण और गुणों की तुलना विवरण पा सकते हैं।

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

यदि हम इस स्क्रीन का अधिक विस्तार से विश्लेषण करते हैं, तो सबसे पहले कार्डिनैलिटी एस्टीमेशन मॉडल संस्करण है। अंतर। पहला क्वेरी संस्करण 70 है और दूसरा 140 है। यह अंतर पंक्तियों की अनुमानित संख्या को प्रभावित करता है . अलग-अलग पंक्तियों की अनुमानित संख्या . का मुख्य कारण कार्डिनैलिटी अनुमान का एक अलग संस्करण है। इस प्रकार, कार्डिनैलिटी अनुमान संस्करण सीधे क्वेरी अनुमानित मेट्रिक्स को प्रभावित करता है। इस क्वेरी तुलना के लिए, हम यह निष्कर्ष निकाल सकते हैं कि कार्डिनैलिटी अनुमान संस्करण 140 की क्वेरी बेहतर प्रदर्शन करती है क्योंकि पंक्तियों की अनुमानित संख्या पंक्तियों की वास्तविक संख्या के करीब है। . इस मामले को नीचे दी गई तालिका से स्पष्ट किया जा सकता है।

[टेबल आईडी=50 /]

यदि हम एक ही स्क्रीन पर निष्पादन योजनाओं को साथ-साथ देखना चाहते हैं, तो हम टॉगल स्प्लिटर ओरिएंटेशन पर क्लिक कर सकते हैं। ।

अब हम एक और प्रदर्शन करेंगे। हम नीचे दी गई क्वेरी को देखेंगे और अनुक्रमणिका निर्माण से पहले और बाद में निष्पादन योजनाओं की तुलना करेंगे।
जब हम नीचे दी गई क्वेरी निष्पादन योजना को देखते हैं, तो यह एक गैर-संकुल अनुक्रमणिका बनाने की अनुशंसा करती है।

चुनें [CarrierTrackingNumber] [Sales] से।[SalesOrderDetail] जहां [SalesOrderDetailID]=12

हम अनुशंसित अनुक्रमणिका लागू करेंगे और उसी क्वेरी को फिर से निष्पादित करेंगे।

NONCLUSTERED INDEX Index_NCON [सेल्स] बनाएं।[SalesOrderDetail] ([SalesOrderDetailID])GOSELECT [CarrierTrackingNumber] [Sales] से।[SalesOrderDetail] जहां [SalesOrderDetailID]=12

इस अंतिम चरण में, हम निष्पादन योजनाओं की तुलना करेंगे।

उपरोक्त छवि में, हम निष्पादन योजनाओं के बारे में कई जानकारी प्राप्त कर सकते हैं। लेकिन मुख्य अंतर लॉजिकल ऑपरेशन का है खेत। उनमें से एक है इंडेक्स सीक और दूसरा है इंडेक्स स्कैन और यह ऑपरेशन भेदभाव अलग-अलग अनुमानित और वास्तविक मीट्रिक मूल्यों की ओर जाता है। आखिर में इंडेक्स सीक ऑपरेटर इंडेक्स स्कैन ऑपरेटर से बेहतर प्रदर्शन करता है।

निष्कर्ष

जैसा कि हमने लेख में उल्लेख किया है, तुलना शोप्लान सुविधा डेटाबेस डेवलपर या प्रशासक को कुछ लाभ प्रदान करती है। इनमें से कुछ को इस प्रकार गिना जा सकता है:

  • दो निष्पादन योजनाओं के अंतर की तुलना करना आसान है।
  • विभिन्न SQL सर्वर संस्करणों में क्वेरी प्रदर्शन समस्याओं का पता लगाने में आसान।
  • विभिन्न वातावरणों में क्वेरी प्रदर्शन समस्याओं का पता लगाने में आसान।
  • सूचकांक निर्माण से पहले और बाद में निष्पादन योजना परिवर्तनों को सरलता से स्पष्ट करता है।

संदर्भ

  • कार्डिनैलिटी अनुमान (एसक्यूएल सर्वर)
  • क्वेरी प्रोसेसिंग आर्किटेक्चर गाइड

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर में एक डेटाबेस से दूसरे डेटाबेस में टेबल कॉपी करें

  2. SQL में अल्पविराम से अलग किए गए परिणाम

  3. SQL सर्वर ने घटक 'ओले ऑटोमेशन प्रक्रियाओं' की प्रक्रिया 'sys.sp_OACreate' तक पहुंच को अवरुद्ध कर दिया

  4. दो तिथियों के बीच के महीने

  5. क्वेरी द्वारा लौटाई गई प्रत्येक पंक्ति के लिए मैं एक बार संग्रहीत प्रक्रिया को कैसे निष्पादित करूं?