অপ্টিমাইজার, প্রোফাইল এবং বেসলাইন
উচ্চ স্তরে এই তিনটি উপাদান নিম্নরূপ কাজ করে:
কোয়েরি অপ্টিমাইজার সিস্টেম পরিসংখ্যান, বাইন্ড ভেরিয়েবল এবং কম্পাইলেশন এর মতো তথ্য ব্যবহার করে কোয়ারি এক্সিকিউশনের জন্য সেরা প্ল্যান বেছে নেয়। কিন্তু иногда ইনপুট ডিফেক্টের কারণে সাব-অপ্টিমাল প্ল্যান হয়।
SQL প্রোফাইল সাহায্যকারী তথ্য ধারণ করে যা এই সমস্যা কমিয়ে দেয়। এগুলো ভুলগুলো মিনিমাইজ করে এবং অপ্টিমাইজারকে সেরা প্ল্যান বেছে নেওয়ার সাহায্য করে।
SQL প্ল্যান বেসলাইন SQL স্টেটমেন্টের জন্য এক্সেপ্টেড প্ল্যানের একটি সেট নিয়ে গঠিত। স্টেটমেন্ট পার্স করার পর অপ্টিমাইজার এক্সেপ্টেড প্ল্যানের সেট থেকে সেরা প্ল্যান বেছে নেয়। যদি কস্ট অপ্টিমাইজার আরেকটি ভালো প্ল্যান পায়, তবে সেটি প্ল্যান হিস্টরিতে যোগ হয়। কিন্তু অপ্টিমাইজার নতুন প্ল্যানটি ব্যবহার করে না যতক্ষণ না সেটি বর্তমান এক্সেপ্টেড প্ল্যানের চেয়ে ভালো পারফর্ম করবে তা যাচাই করে।
এভাবে ভাবুন: SQL প্রোফাইল অপ্টিমাইজারকে সেরা প্ল্যান বেছে নেওয়ার জন্য তথ্য দেয় কিন্তু কোনো নির্দিষ্ট প্ল্যান বেছে নেওয়ার জন্য বাধ্য করে না। SQL প্ল্যান বেসলাইন অপ্টিমাইজারের প্ল্যান সিলেকশনকে এক্সেপ্টেড প্ল্যানের সেটের মধ্যে সীমাবদ্ধ করে। আপনি কস্ট-ভিত্তিক প্ল্যান বিবেচনা করতে চাইলে সেগুলো এক্সেপ্টেড বেসলাইন প্ল্যান সেটে অন্তর্ভুক্ত করুন।
SQL প্রোফাইল ব্যবহার করুন যদি আপনি অপ্টিমাইজারের লীস্ট-কস্ট প্ল্যান এবং সর্বশেষ পরিসংখ্যান ব্যবহার করতে চান। বেসলাইন ব্যবহার করুন যখন আপনি একটি নির্দিষ্ট সেট প্ল্যান ব্যবহার করতে চান। যদি SQL প্ল্যান বেসলাইন এক্সেপ্টেড সেট থেকে সেরা প্ল্যান না পায়, তবে SQL প্রোফাইল ব্যবহার করুন।
SQL Plan Management (SPM)
SQL Plan Management (SPM)-এর উপাদানগুলো:
- প্ল্যান ক্যাপচার
- প্ল্যান সিলেকশন
- প্ল্যান ইভোলিউশন
SPM প্ল্যান ক্যাপচার
আপনি যেকোনো স্টেটমেন্ট এক্সিকিউট করলে, সিস্টেম সেটি হার্ড পার্স করে এবং উপলব্ধ SQL প্রোফাইল অনুযায়ী কস্ট প্ল্যান জেনারেট করে। কস্ট-ভিত্তিক প্ল্যান সিলেক্ট করার পর, সেটি SQL প্ল্যান বেসলাইনে উপলব্ধ প্ল্যানের সাথে তুলনা করে। যদি কস্ট-ভিত্তিক জেনারেটেড প্ল্যান এক্সেপ্টেড প্ল্যানের সাথে মিলে যায়, তবে সেটি ব্যবহার করা যায়। না মিললে, সিস্টেম সেটি প্ল্যান বেসলাইনে আন-এক্সেপ্টেড প্ল্যান হিসেবে যোগ করে।
SPM প্ল্যান সিলেকশন
বেসলাইন প্ল্যান সহ SQL স্টেটমেন্ট এক্সিকিউট করলে, সেটি সেই SQL-এর জন্য সেরা প্ল্যান বেছে নেয়। অপ্টিমাইজার একই প্রক্রিয়া অনুসরণ করে। উপলব্ধ SQL প্রোফাইলও প্রতিটি প্ল্যানের অনুমানিত কস্টকে প্রভাবিত করে এবং প্ল্যান বেছে নেয়।
SPM প্ল্যান ইভোলিউশন
SPM-এর শেষ উপাদান হল আন-এক্সেপ্টেড প্ল্যানের ইভোলিউশন, যা আন-এক্সেপ্টেড প্ল্যানগুলিকে এক্সেপ্টেড প্ল্যানের সাথে টেস্ট করে। এই প্রক্রিয়াটি কোয়েরির সময় এবং CPU রিসোর্স বিবেচনা করে সেরা প্ল্যান আсеস করে। এটি কোয়েরির কস্ট অনুযায়ী সেরা প্ল্যান এক্সেপ্ট করে। যদি SQL প্রোফাইল উপলব্ধ থাকে, তবে এটি অনুমানিত কস্টকে প্রভাবিত করে।
প্রোফাইল বনাম বেসলাইন তুলনা
নিচের টেবিলটি SQL প্রোফাইল এবং SQL প্ল্যান বেসলাইন তুলনা করে (সোর্স: https://www.cnblogs.com/princessd8251/articles/3637461.html):
আর্কিটেকচার
নিচের ছবিটি 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 প্রোফাইলে অপারেশন সম্পাদন করুন:
১. SQL টিউনিং অ্যাডভাইজার চালান
sql_id 6dkrnbx1zdwy38 জন্য নিচের SQL টিউনিং অ্যাডভাইজার কোড চালান:
DBMS_SQLTUNE.report_tuning_task চালান সুপারিশের জন্য:
২. sql_profile এক্সেপ্ট করুন
sql_profile এক্সেপ্ট করার কোড:
৩. sql_profile-এর নাম চেক করুন
sql_profile নাম চেক করার কোয়ারি:
৪. sql_profile ডিজেবল করুন
sql_profile ডিজেবল করার কোড:
এনেবল করতে মান DISABLED থেকে ENABLED করুন।
৫. sql_profile ড্রপ করুন
sql_profile ড্রপ করার কোড:
উপসংহার
আপনি যেকোনো SQL স্টেটমেন্ট এক্সিকিউট করলে, অপ্টিমাইজার কোয়ারি পার্স করতে, হার্ড ডিস্ক থেকে ডেটা রিট্রিভ করতে এবং মেমরিতে রাখতে একটি এক্সিকিউশন প্ল্যান তৈরি করে। SQL প্রোফাইল এবং বেসলাইন অপ্টিমাইজারকে সময় এবং CPU কস্টের দৃষ্টিতে লীস্ট কস্টলি প্ল্যান বেছে নেওয়ার নির্দেশনা দেয়। একটি ভালো SQL প্ল্যান দক্ষতার সাথে কোয়ারি চালায় এবং দ্রুত ফলাফল প্রদান করে।
আমাদের ডাটাবেস সেবা সম্পর্কে আরও জানুন।
ফিডব্যাক ট্যাব ব্যবহার করে মন্তব্য করুন বা প্রশ্ন জিজ্ঞাসা করুন। আপনি আমাদের সাথে কথা বলতে পারেন।