SQL प्लान प्रबंधन का परिचय
Oracle SQL प्लान प्रबंधन (SPM) Oracle डेटाबेस में एक सुविधा है जो एक क्वेरी के लिए सभी ऐतिहासिक निष्पादन योजनाओं को कैप्चर करती है। इसके साथ, आप SPM में उपलब्ध निष्पादन योजनाओं से अच्छी योजना के लिए एक बेसलाइन बना सकते हैं और उस बेसलाइन को सक्षम कर सकते हैं ताकि यह सुनिश्चित हो सके कि सिस्टम बेसलाइन से केवल अच्छी योजना चुनता है।
इस सुविधा का लाभ उठाने के लिए, आपको उस क्वेरी की sql_id पहचाननी होगी जो एक इंस्टेंस पर अच्छा प्रदर्शन कर रही है और दूसरे इंस्टेंस पर खराब प्रदर्शन कर रही है। आपको उस इंस्टेंस पर क्वेरी के अच्छे निष्पादन योजना ID, plan_hash_value, को भी कैप्चर करना होगा जहां यह अच्छी तरह से काम करती है।
एक इंस्टेंस से दूसरे इंस्टेंस में SQL बेस प्लान कॉपी करें
स्रोत इंस्टेंस से लक्ष्य इंस्टेंस में SQL बेस प्लान कॉपी करने के लिए निम्नलिखित चरणों का उपयोग करें:
- स्रोत इंस्टेंस पर क्वेरी चलाएं, जहां क्वेरी अच्छी तरह से काम करती है, ताकि क्वेरी कर्सर कैश में मौजूद हो।
- स्रोत इंस्टेंस पर, कर्सर कैश से क्वेरी के लिए SQL निष्पादन योजना को SPM में बेसलाइन के रूप में लोड करें।
- स्रोत इंस्टेंस पर एक स्टेजिंग टेबल बनाएं। इस टेबल का उपयोग स्रोत इंस्टेंस से लक्ष्य इंस्टेंस में निष्पादन योजना को माइग्रेट करने के लिए किया जाता है।
- स्रोत निष्पादन योजना, या बेसलाइन, को स्रोत इंस्टेंस पर स्टेजिंग टेबल में पैक करें।
- एक्सपोर्ट/इम्पोर्ट यूटिलिटी का उपयोग करके स्टेजिंग टेबल को स्रोत इंस्टेंस से लक्ष्य इंस्टेंस में स्थानांतरित करें।
- लक्ष्य इंस्टेंस पर स्टेजिंग टेबल से SQL प्लान को SPM में अनपैक करें।
- सत्यापित करें कि लक्ष्य इंस्टेंस पर बनाया गया बेसलाइन फिक्स्ड और स्वीकृत है ताकि अगली बार चलने पर क्वेरी के लिए इसे चुना जाए।
- लक्ष्य इंस्टेंस पर प्रदर्शन समस्या वाले SQL का परीक्षण करें और सत्यापित करें कि यह स्थानांतरित बेसलाइन को चुनता है।
उदाहरण निष्पादन
पहले के चरणों को निष्पादित करने के परिणामस्वरूप निम्नलिखित उदाहरणों के समान आउटपुट होता है।
चरण 1: स्रोत इंस्टेंस पर क्वेरी चलाएं
स्रोत इंस्टेंस पर SQL चलाएं और sql_id और plan_hash_value पहचानें। मान प्राप्त करने के लिए कर्सर कैश की जांच करें। इस मामले में, वे निम्नलिखित मान हैं:
sql_id: 9xva48wpnsmp6plan_hash_value: 1572948408
चरण 2: प्लान को SPM में लोड करें
निम्नलिखित क्वेरी को निष्पादित करके इस अच्छी क्वेरी निष्पादन योजना को कर्सर कैश से SPM में बेसलाइन के रूप में लोड करें: (PL/SQL ब्लॉक दिखाया गया है)
चरण 3: स्रोत इंस्टेंस पर स्टेजिंग टेबल बनाएं
SQL> BEGIN
DBMS_SPM.CREATE_STGTAB_BASELINE(
table_name => 'SPM_STAGETAB',
table_owner => 'APPS',
tablespace_name => 'SYSAUX');
END;
/
PL/SQL procedure successfully completed.
चरण 4: बेसलाइन पैक करें
SQL> DECLARE
my_plans number;
BEGIN
my_plans := DBMS_SPM.PACK_STGTAB_BASELINE(
table_name => 'SPM_STAGETAB', enabled => 'yes',
table_owner => 'APPS',
plan_name => 'SQL_PLAN_d6j5asfazky54868c96c3',
sql_handle => 'SQL_d344aac395f978a4');
END;
/
PL/SQL procedure successfully completed.
चरण 5: स्टेजिंग टेबल को स्रोत से लक्ष्य इंस्टेंस में स्थानांतरित करें
स्रोत इंस्टेंस पर स्टेजिंग टेबल का एक्सपोर्ट बैकअप लें, फिर लक्ष्य इंस्टेंस पर इम्पोर्ट करें।
चरण 6: बेसलाइन अनपैक करें
लक्ष्य इंस्टेंस के SPM में स्टेजिंग टेबल से बेसलाइन अनपैक करें। अनपैक करने से पहले और बाद में काउंट लेकर सत्यापित करें।
चरण 7: बेसलाइन सत्यापित करें
लक्ष्य इंस्टेंस पर यह सत्यापित करने के लिए कमांड चलाएं कि बेसलाइन स्वीकृत और फिक्स्ड है। यदि फिक्स्ड नहीं है, तो DBMS_SPM.alter_sql_plan_baseline का उपयोग करके इसे फिक्स्ड करें।
चरण 8: लक्ष्य इंस्टेंस पर SQL क्वेरी का परीक्षण करें
लक्ष्य इंस्टेंस पर कमांड निष्पादित करें ताकि सत्यापित हो सके कि यह नया बेसलाइन चुनता है।
SQL प्लान कैसे चुना जाता है
निम्न छवि दिखाती है कि जब एक बेसलाइन प्लान मौजूद होता है तो SQL प्लान कैसे चुना जाता है।
निष्कर्ष
यदि आपको एक सिंगल क्वेरी के लिए बेसलाइन स्थानांतरित करना है तो इस पोस्ट के चरणों का उपयोग करें। आप अपग्रेड, माइग्रेशन, आदि के लिए सभी क्वेरीज़ के लिए SQL बेसलाइन भी जनरेट कर सकते हैं। सुसंगत SQL निष्पादन योजनाएँ रखने और किसी भी प्रदर्शन समस्या से बचने के लिए SQL प्लान बेसलाइन का उपयोग करें।