এই ব্লগ পোস্টে অন্বেষণ করা হয়েছে কখন এবং কীভাবে আপনি 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');
উপসংহার
এই পোস্টের তথ্য এবং কোয়ারিগুলো আপনাকে সব ধরনের ডেটাবেস পরিসংখ্যান (টেবিল, ডেটাবেস, স্কিমা, ফিক্সড_অবজেক্ট, সিস্টেম, এবং ডিকশনারি) একটি যুক্তিসঙ্গত পূর্বের তারিখে পুনরুদ্ধার করতে সাহায্য করবে, যা সুগম ডেটাবেস পারফরম্যান্স নিশ্চিত করে।
কোনো মন্তব্য বা প্রশ্ন করার জন্য ফিডব্যাক ট্যাব ব্যবহার করুন। আপনি এখন চ্যাট করেও কথা বলতে পারেন।
আমাদের ডেটাবেস সার্ভিস সম্পর্কে আরও জানুন