यह ब्लॉग पोस्ट यह पता लगाता है कि आप Oracle® डेटाबेस में सांख्यिकी को कब और कैसे पुनर्स्थापित कर सकते हैं।
परिचय
एक डेटाबेस प्रशासक (DBA) के रूप में, आप शायद अक्सर पाते हैं कि नई सांख्यिकी एकत्र करने से ऑप्टिमाइज़र सबऑप्टिमल एक्जीक्यूशन प्लान निष्पादित करता है। उन मामलों में, आप उस समय की सांख्यिकी को पुनर्स्थापित करना चाह सकते हैं जब प्रदर्शन बेहतर था।
हालांकि, Oracle डेटाबेस के विभिन्न संस्करणों में सांख्यिकी को संभालने के तरीके में मामूली बदलाव हैं:
- Oracle 10g ने आसान पुनर्स्थापना के लिए सांख्यिकी को स्वचालित रूप से संरक्षित करना शुरू किया।
- 11.1 और बाद के संस्करण में, Oracle ने एक बेहतर तरीका पेश किया, जिससे आप सांख्यिकी प्रकाशन को स्थगित कर सकते हैं।
खराब सांख्यिकी प्रदर्शन के संभावित कारण
आपको यह सुनिश्चित करने के लिए सांख्यिकी एकत्र करना आवश्यक हो सकता है कि ऑप्टिमाइज़र इष्टतम एक्जीक्यूशन प्लान चुने, लेकिन सांख्यिकी एकत्र करने से SQL स्टेटमेंट के पार्स्ड प्रतिनिधित्व अमान्य हो जाते हैं। इसके अलावा, सांख्यिकी एकत्र करने के बाद स्टेटमेंट को फिर से पार्स करने से ऑप्टिमाइज़र एक एक्जीक्यूशन प्लान चुन सकता है जो मूल प्लान से अलग और कम अनुकूलित हो।
Oracle 10g और बाद के संस्करण में, आप dbms_stats पैकेज का उपयोग करके सांख्यिकी को पुनर्स्थापित कर सकते हैं, जो आपको सांख्यिकी को पुनर्स्थापित और निर्यात करने का विकल्प देता है।
डिफ़ॉल्ट रूप से, Oracle ऐतिहासिक सांख्यिकी को 31 दिनों तक रखता है, लेकिन आप उस अवधि को बदल सकते हैं।
निम्न छवि वर्तमान प्रतिधारण अवधि दिखाने के लिए SQL कमांड दिखाती है:
प्रतिधारण अवधि बदलने के लिए, निम्न कमांड चलाएं, जहां xx वह दिनों की संख्या है जिसे आप उपयोग करना चाहते हैं:
SQL> execute DBMS_STATS.ALTER_STATS_HISTORY_RETENTION (xx)
निम्न क्वेरी आपको यह समझने में मदद करती है कि आप कौन सा ऐतिहासिक डेटा स्टैट्स पुनर्स्थापित कर सकते हैं:
नोट: यह उदाहरण पहले उल्लिखित तिथि और बाद की सांख्यिकी दिखाता है।
टेबल सांख्यिकी पुनर्स्थापित करना
यह उदाहरण दर्शाता है कि किसी पूर्व तिथि से टेबल सांख्यिकी को कैसे पुनर्स्थापित किया जाए।
पहले, निम्न कमांड चलाकर पहचानें कि कौन सी सांख्यिकी उपलब्ध हैं:
SQL> select TABLE_NAME, STATS_UPDATE_TIME from dba_tab_stats_history where table_name like 'MY_TABLE' and owner='MYSELF' order by 2; TABLE_NAME STATS_UPDATE_TIME --------------- -------------------------------------- MY_TABLE 20-DEC-19 05.32.26.887184 AM -05:00 MY_TABLE 20-DEC-19 10.10.19.361091 PM -05:00 MY_TABLE 21-DEC-19 05.32.14.475934 AM -05:00 MY_TABLE 21-DEC-19 10.10.18.725917 PM -05:00 MY_TABLE 22-DEC-19 10.10.17.841143 PM -05:00 MY_TABLE 23-DEC-19 05.32.56.168779 AM -05:00 MY_TABLE 23-DEC-19 10.10.23.633939 PM -05:00 MY_TABLE 24-DEC-19 05.32.14.082730 AM -05:00 MY_TABLE 24-DEC-19 10.10.21.712948 PM -05:00 MY_TABLE 25-DEC-19 05.32.13.710159 AM -05:00 MY_TABLE 25-DEC-19 10.10.17.836929 PM -05:00 MY_TABLE 26-DEC-19 05.32.14.545533 AM -05:00 MY_TABLE 26-DEC-19 10.10.12.808687 PM -05:00 MY_TABLE 27-DEC-19 05.32.13.779967 AM -05:00
आप देख सकते हैं कि MY_TABLE का पिछले कुछ दिनों में कई बार विश्लेषण किया गया था। 21-DEC-19 10.10.18.725917 PM -05:00 को एकत्र की गई टेबल की टेबल सांख्यिकी को पुनर्स्थापित करने के लिए, निम्न कमांड चलाएं:
SQL> execute dbms_stats.restore_table_stats('MYSELF','MY_TABLE','21-DEC-19 10.10.18.725917 PM -05:00'); PL/SQL procedure successfully completed.
स्कीमा सांख्यिकी पुनर्स्थापित करना
यह उदाहरण दर्शाता है कि किसी पूर्व तिथि से स्कीमा सांख्यिकी को कैसे पुनर्स्थापित किया जाए।
21-DEC-19 10.10.18.725917 PM -05:00 को एकत्र की गई टेबल की स्कीमा सांख्यिकी को पुनर्स्थापित करने के लिए, निम्न कमांड चलाएं:
SQL> exec dbms_stats.restore_schema_stats(ownname=>'MYSELF', AS_OF_TIMESTAMP=>'21-DEC-19 10.10.18.725917 PM -05:00');
AS_OF_TIMESTAMP के लिए उपलब्ध स्कीमा सांख्यिकी विकल्प खोजने के लिए, निम्न कमांड चलाएं और पुनर्स्थापना के लिए उपयुक्त तिथि चुनें:
select count(*), stats_update_time from dba_tab_stats_history where owner='MYSELF' group by stats_update_time;
अन्य सांख्यिकी पुनर्स्थापित करें
आपने देखा कि टेबल और स्कीमा स्टैट्स को कैसे पुनर्स्थापित किया जाता है। निम्न सूची उन सभी संस्थाओं को दिखाती है जिनके लिए आप पिछली सांख्यिकी को पुनर्स्थापित कर सकते हैं:
- TABLE_STATS
- SCHEMA_STATS
- DATABASE_STATS
- DICTIONARY_STATS
- FIXED_OBJECTS_STATS
- SYSTEM_STATS
आप जिन सांख्यिकी को सहेजना चाहते हैं उन्हें निर्यात करें
आप उन सांख्यिकी को भी निर्यात कर सकते हैं जिन्हें आप सहेजना चाहते हैं या परिवर्तन करने से पहले वर्तमान सांख्यिकी को निर्यात कर सकते हैं, निम्न चरणों को करके:
निम्न उदाहरण के समान कमांड चलाकर सांख्यिकी टेबल बनाएं:
Exec dbms_stats.create_stat_table(ownname => 'MYSELF', stattab => 'MYSELF_STATS_
', tblspace => ' '); ownname: मालिक का नाम stattab: उपयोगकर्ता MYSELF के तहत बनाने के लिए टेबलनाम tblspace: वह टेबलस्पेस जिसके तहत यह टेबल बनाना है
निम्न उदाहरण के समान कमांड चलाकर पिछली टेबल में सांख्यिकी निर्यात करें:
exec dbms_stats.export_table_stats('SCHEMA1','TAB1',NULL,'STATS','TAG1_TAB1',TRUE);
उदाहरण के लिए:
Exec dbms_stats.export_database_stats(statown => 'MYSELF', stattab => 'MYSELF_STATS');
निष्कर्ष
इस पोस्ट में जानकारी और क्वेरी आपको सभी प्रकार की डेटाबेस सांख्यिकी (टेबल, डेटाबेस, स्कीमा, फिक्स्ड_ऑब्जेक्ट, सिस्टम, और डिक्शनरी) को एक उचित पिछली तिथि पर पुनर्स्थापित करने में मदद करती हैं, जिससे सुचारू डेटाबेस प्रदर्शन सुनिश्चित होता है।
कोई भी टिप्पणी करने या प्रश्न पूछने के लिए फीडबैक टैब का उपयोग करें। आप बातचीत शुरू करने के लिए अभी चैट भी कर सकते हैं।
हमारी डेटाबेस सेवाओं के बारे में और जानें