यह पोस्ट Oracle® में SQL प्रोफाइल और बेसलाइन के बीच अंतर पर प्रकाश डालती है और बताती है कि क्वेरी ट्यून करते समय यह कैसे काम करता है।
ऑप्टिमाइज़र, प्रोफाइल, और बेसलाइन
उच्च स्तर पर, ये तीन तत्व निम्नानुसार एक साथ काम करते हैं:
-
क्वेरी ऑप्टिमाइज़र सिस्टम आँकड़े, बाइंड वेरिएबल्स, और कंपाइलेशन जैसी जानकारी का उपयोग क्वेरी निष्पादन के लिए सर्वोत्तम योजना प्राप्त करने के लिए करता है। हालांकि, कभी-कभी इनपुट दोष उप-इष्टतम योजना की ओर ले जाते हैं।
-
SQL प्रोफाइल में सहायक जानकारी होती है जो इस समस्या को कम करती है। वे इन गलतियों को कम करते हैं और ऑप्टिमाइज़र को सर्वोत्तम योजना चुनने में मदद करते हैं।
-
SQL स्टेटमेंट्स के लिए SQL प्लान बेसलाइन में स्वीकृत योजनाओं का एक सेट होता है। स्टेटमेंट को पार्स करने के बाद, ऑप्टिमाइज़र स्वीकृत योजनाओं के सेट से सर्वोत्तम योजना चुनता है। यदि कॉस्ट ऑप्टिमाइज़र को कोई अन्य अच्छी योजना मिलती है, तो वह नई योजना को प्लान हिस्ट्री में जोड़ता है। हालांकि, ऑप्टिमाइज़र नई योजना का उपयोग तब तक नहीं करता जब तक वह सत्यापित नहीं कर लेता कि यह वर्तमान में स्वीकृत योजना से बेहतर प्रदर्शन करेगी।
इसे इस तरह समझें: SQL प्रोफाइल ऑप्टिमाइज़र को सर्वोत्तम योजना चुनने में मदद करने के लिए जानकारी देते हैं लेकिन ऑप्टिमाइज़र को किसी विशिष्ट योजना को चुनने के लिए बाध्य नहीं करते। SQL प्लान बेसलाइन ऑप्टिमाइज़र योजना चयन को स्वीकृत योजनाओं के एक सेट तक सीमित करते हैं। यदि आप कॉस्ट-आधारित योजनाओं पर विचार करना चाहते हैं, तो उन्हें स्वीकृत बेसलाइन योजना सेट में शामिल करें।
SQL प्रोफाइल का उपयोग करें यदि आप चाहते हैं कि ऑप्टिमाइज़र न्यूनतम-लागत योजना का उपयोग करे और नवीनतम आँकड़ों का उपयोग करने की आवश्यकता हो। बेसलाइन का उपयोग तब करें जब आप योजनाओं के एक विशिष्ट सेट में से एक का उपयोग करना चाहते हैं। यदि SQL प्लान बेसलाइन स्वीकृत सेट से सर्वोत्तम योजना प्राप्त नहीं कर सकते, तो SQL प्रोफाइल का उपयोग करें।
SQL प्लान प्रबंधन
SQL प्लान प्रबंधन (SPM) में निम्न घटक होते हैं:
- प्लान कैप्चर
- प्लान चयन
- प्लान विकास
SPM प्लान कैप्चर
जब आप कोई स्टेटमेंट निष्पादित करते हैं, तो सिस्टम उसे हार्ड पार्स करता है और उपलब्ध SQL प्रोफाइल के अनुसार कॉस्ट प्लान उत्पन्न करता है। कॉस्ट-आधारित योजना चुनने के बाद, यह SQL प्लान बेसलाइन में उपलब्ध योजनाओं की तुलना करता है। यदि कॉस्ट-आधारित उत्पन्न योजना स्वीकृत योजनाओं में से एक से मेल खाती है, तो आप उस योजना का उपयोग कर सकते हैं। यदि योजना मेल नहीं खाती, तो सिस्टम उसे प्लान बेसलाइन में अस्वीकृत योजना के रूप में जोड़ता है।
SPM प्लान चयन
जब आप बेसलाइन प्लान के साथ SQL स्टेटमेंट निष्पादित करते हैं, तो यह उस SQL के लिए सर्वोत्तम योजना चुनता है। ऑप्टिमाइज़र उसी प्रक्रिया का उपयोग करता है। उपलब्ध SQL प्रोफाइल प्रत्येक योजना के अनुमानित कॉस्ट को भी प्रभावित करता है और तदनुसार एक योजना चुनता है।
SPM प्लान विकास
SPM का अंतिम घटक अस्वीकृत योजनाओं का विकास है, जो अस्वीकृत योजनाओं का परीक्षण स्वीकृत योजनाओं के विरुद्ध करता है। यह प्रक्रिया क्वेरी द्वारा लिए गए समय और आवश्यक CPU संसाधनों को ध्यान में रखते हुए सर्वोत्तम योजना का आकलन करती है। यह क्वेरी की लागत के अनुसार सर्वोत्तम योजना को स्वीकार करता है। यदि SQL प्रोफाइल उपलब्ध है, तो यह अनुमानित लागत को प्रभावित करता है।
प्रोफाइल बनाम बेसलाइन तुलना
निम्न तालिका, https://www.cnblogs.com/princessd8251/articles/3637461.html से, SQL प्रोफाइल और SQL प्लान बेसलाइन की तुलना करती है:
आर्किटेक्चर
निम्न छवि SQL प्लान बेसलाइन आर्किटेक्चर दिखाती है:
छवि स्रोत: https://ittutorial.org/sql-plan-management-using-sql-plan-baselines-in-oracle-oracle-database-performance-tuning-tutorial-14/)
SQL प्लान बेसलाइन लोड करें
निम्न छवि SQL प्लान बेसलाइन लोड करने के दो तरीके दिखाती है:
छवि स्रोत: https://ittutorial.org/sql-plan-management-using-sql-plan-baselines-in-oracle-oracle-database-performance-tuning-tutorial-14/
पहली विधि के साथ, आप स्वचालित प्लान कैप्चर का उपयोग करने के लिए OPTIMIZER_CAPTURE_SQL_PLAN_BASELINES इनिशियलाइज़ेशन पैरामीटर को TRUE पर सेट कर सकते हैं। यह इनिशियलाइज़ेशन पैरामीटर डिफ़ॉल्ट रूप से FALSE है, इसलिए इसे निम्न उदाहरण में दिखाए अनुसार TRUE पर सेट करें:
दूसरी विधि के साथ, आप DBMS_SPM पैकेज का उपयोग करके SQL प्लान बेसलाइन को मैन्युअल रूप से प्रबंधित कर सकते हैं। निम्न उदाहरण में दिखाए अनुसार SQL ट्यूनिंग सेट से प्लान लोड करें:
SQL प्लान बेसलाइन मैन्युअली लोड करें
प्लान बेसलाइन को मैन्युअली लोड करने के लिए निम्न कमांड का उपयोग करें:
SQL प्लान बेसलाइन उपयोग जांचें
SQL प्लान बेसलाइन लोड करने के बाद, आपको यह देखने के लिए SQL निष्पादित करने की आवश्यकता है कि ऑप्टिमाइज़र SQL प्लान बेसलाइन का उपयोग कर रहा है या नहीं। आप SQL_TEXT और प्लान नाम का उपयोग करके SQL प्लान बेसलाइन क्वेरी कर सकते हैं:
SQL प्लान बेसलाइन प्रदर्शित करें
SQL प्लान बेसलाइन प्रदर्शित करने के लिए निम्न क्वेरी चलाएं:
SQL प्लान बेसलाइन ड्रॉप करें
SQL प्लान बेसलाइन ड्रॉप करने के लिए, यह जांचने के लिए निम्न क्वेरी चलाएं कि ऑप्टिमाइज़र किस SQL प्लान का उपयोग कर रहा है:
फिर, उपयोग में प्लान प्राप्त करने के बाद, बेसलाइन ड्रॉप करने के लिए निम्न कमांड चलाएं:
Oracle SQL प्रोफाइल
SQL ट्यूनिंग एडवाइजर, जिसे आप Oracle Enterprise Manager (OEM) के माध्यम से ट्रिगर करते हैं या कमांड-लाइन क्वेरी का उपयोग करके, एक SQL स्टेटमेंट के लिए SQL प्रोफाइल उत्पन्न कर सकता है। इस प्रोफाइल में स्टेटमेंट के बारे में अतिरिक्त जानकारी शामिल होती है।
उदाहरण
इस उदाहरण में, आप पहले sql_id के विरुद्ध SQL ट्यूनिंग एडवाइजर चलाते हैं और फिर SQL प्रोफाइल पर ऑपरेशन निष्पादित करते हैं:
1. SQL ट्यूनिंग एडवाइजर चलाएं
sql_id, 6dkrnbx1zdwy38 के लिए निम्न SQL ट्यूनिंग एडवाइजर कोड चलाएं:
सिफारिशों के लिए निम्न DBMS_SQLTUNE.report_tuning_task चलाएं:
2. SQL प्रोफाइल स्वीकार करें
SQL प्रोफाइल स्वीकार करने के लिए निम्न कोड चलाएं:
3. SQL प्रोफाइल का नाम जांचें
SQL प्रोफाइल नाम जांचने के लिए निम्न क्वेरी का उपयोग करें:
4. SQL प्रोफाइल अक्षम करें
SQL प्रोफाइल अक्षम करने के लिए निम्न कोड चलाएं:
इसे सक्षम करने के लिए, मान को DISABLED से ENABLED में बदलें।
5. SQL प्रोफाइल ड्रॉप करें
SQL प्रोफाइल ड्रॉप करने के लिए निम्न कोड चलाएं:
निष्कर्ष
जब आप कोई SQL स्टेटमेंट निष्पादित करते हैं, तो ऑप्टिमाइज़र क्वेरी को पार्स करने, हार्ड डिस्क से डेटा पुनर्प्राप्त करने, और इसे मेमोरी में रखने के लिए एक निष्पादन योजना बनाता है। SQL प्रोफाइल और बेसलाइन ऑप्टिमाइज़र को समय और CPU लागत के मामले में न्यूनतम खर्चीली योजना चुनने के लिए मार्गदर्शन करते हैं। एक अच्छी SQL प्लान क्वेरी को कुशलतापूर्वक चलाती है और वांछित परिणाम तेजी से प्रदान करती है।
हमारी डेटाबेस सेवाओं के बारे में अधिक जानें।
कोई टिप्पणी करने या प्रश्न पूछने के लिए फीडबैक टैब का उपयोग करें। आप हमसे बातचीत भी शुरू कर सकते हैं।