এই ব্লগ পোস্টটি অন্বেষণ করে যে আপনি কখন এবং কীভাবে Oracle®Database-এ পরিসংখ্যান পুনরুদ্ধার করতে পারেন।
পরিচয়
ডাটাবেস অ্যাডমিনিস্ট্রেটর (DBA) হিসাবে, আপনি সম্ভবত প্রায়শই দেখতে পান যে নতুন পরিসংখ্যান সংগ্রহ করা অপ্টিমাইজারকে সাবঅপ্টিমাল এক্সিকিউশন প্ল্যান বাস্তবায়নের দিকে নিয়ে যায়। এই ক্ষেত্রে, আপনি এমন একটি সময় থেকে পরিসংখ্যান পুনরুদ্ধার করতে চাইতে পারেন যখন পারফরম্যান্স আরও ভাল ছিল৷
যাইহোক, ওরাকল ডেটাবেসের বিভিন্ন সংস্করণে পরিসংখ্যান পরিচালনার পদ্ধতিতে সামান্য পরিবর্তন রয়েছে:
- Oracle 10g সহজে পুনরুদ্ধারের জন্য স্বয়ংক্রিয়ভাবে পরিসংখ্যান সংরক্ষণ করা শুরু করেছে।
- 11.1 এবং তার পরে, ওরাকল একটি ভাল উপায় চালু করেছে, যা আপনাকে পরিসংখ্যান প্রকাশ স্থগিত করার অনুমতি দেয়।
দরিদ্র পরিসংখ্যান কর্মক্ষমতার সম্ভাব্য কারণ
অপ্টিমাইজার সর্বোত্তম এক্সিকিউশন প্ল্যান বেছে নেয় তা নিশ্চিত করতে আপনার পরিসংখ্যান সংগ্রহ করা প্রয়োজন মনে হতে পারে, কিন্তু পরিসংখ্যান সংগ্রহ করা SQL স্টেটমেন্টের পার্সড উপস্থাপনাকে বাতিল করে দেয়। এছাড়াও, পরিসংখ্যান সংগ্রহের পরে বিবৃতিটি পুনরায় পরিবর্তন করলে অপ্টিমাইজার একটি কার্যকরী পরিকল্পনা বেছে নিতে পারে যা মূল পরিকল্পনার চেয়ে আলাদা এবং কম অপ্টিমাইজ করা হয়৷
Oracle 10g এবং পরবর্তীতে, আপনি dbms_stats ব্যবহার করে পরিসংখ্যান পুনরুদ্ধার করতে পারেন প্যাকেজ, যা আপনাকে পরিসংখ্যান পুনরুদ্ধার এবং পরিসংখ্যান রপ্তানির বিকল্প দেয়।
ডিফল্টরূপে, ওরাকল 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(নিজের নাম => 'MYSELF', stattab => 'MYSELF_STATS_
',tblspace => ' ');
নিজের নাম: মালিকের নামstattab: tblspace: তৈরি করতে ব্যবহারকারী MYSELF এর অধীনে টেবিলের নাম টেবিলস্পেস যার অধীনে এই টেবিলটি তৈরি করতে হবে
নিম্নলিখিত উদাহরণের অনুরূপ একটি কমান্ড চালানোর মাধ্যমে পূর্ববর্তী সারণীতে পরিসংখ্যান রপ্তানি করুন:
exec dbms_stats.export_table_stats('SCHEMA1','TAB1',NULL,'STATS','TAG1_TAB1',TRUE);
যেমন:
Exec dbms_stats.export_database_stats(statown => 'MYSELF', stattab => 'MYSELF_STATS');
উপসংহার
এই পোস্টের তথ্য এবং প্রশ্নগুলি আপনাকে সমস্ত ধরণের ডেটাবেস পরিসংখ্যান (টেবিল, ডেটাবেস, স্কিমা, ফিক্সড_অবজেক্ট, সিস্টেম এবং অভিধান) একটি যুক্তিসঙ্গত অতীত তারিখে পুনরুদ্ধার করতে সাহায্য করে, ডাটাবেসের কার্যকারিতা নিশ্চিত করে৷
কোনো মন্তব্য করতে বা প্রশ্ন জিজ্ঞাসা করতে প্রতিক্রিয়া ট্যাব ব্যবহার করুন। কথোপকথন শুরু করতে আপনি এখন চ্যাটও করতে পারেন।
আমাদের ডেটাবেস পরিষেবাগুলি সম্পর্কে আরও জানুন