কম্পিউটার

এসকিউএল প্ল্যান বেসলাইন ব্যবহার করে এসকিউএল প্ল্যান স্থানান্তর করুন

একটি নির্দিষ্ট এসকিউএল কোয়েরি একটি ডাটাবেসে খারাপভাবে কাজ করতে পারে (যেমন উৎপাদন) কিন্তু অন্য ডাটাবেসে (যেমন ডেভেলপমেন্ট) ভালো কাজ করে। এই পরিস্থিতি ঘটতে পারে যদি একই প্রশ্নের প্রতিটি উদাহরণে একটি ভিন্ন কার্যকরী পরিকল্পনা থাকে। এই ব্লগটি দেখায় কিভাবে এক্সিকিউশন প্ল্যানকে একটি উদাহরণ থেকে স্থানান্তর করতে হয়, যেখানে কোয়েরি ঠিক থাকে, অন্য একটি উদাহরণে, যেখানে কোয়েরি খারাপ আচরণ করে, SQLplan বেসলাইন বৈশিষ্ট্যটি ব্যবহার করে যেটি Oracle® Database® প্রথম বিপরীত 11g চালু করেছিল।

এসকিউএল প্ল্যান ম্যানেজমেন্টের ভূমিকা

ওরাকল এসকিউএল প্ল্যান ম্যানেজমেন্ট (এসপিএম) হল ওরাকল ডেটাবেসের একটি বৈশিষ্ট্য যা একটি প্রশ্নের জন্য সমস্ত ঐতিহাসিক এক্সিকিউশন প্ল্যান ক্যাপচার করে। এর সাথে, আপনি SPM-এ উপলব্ধ এক্সিকিউশন প্ল্যানগুলি থেকে ভাল পরিকল্পনার জন্য একটি বেসলাইন তৈরি করতে পারেন এবং সিস্টেমটি বেসলাইন থেকে শুধুমাত্র ভাল প্ল্যান বাছাই করে তা নিশ্চিত করতে সেই বেসলাইনটিকে সক্ষম করে৷

এই বৈশিষ্ট্যের সুবিধা নিতে, আপনাকে অবশ্যই sql_id সনাক্ত করতে হবে প্রশ্ন যা এক দৃষ্টান্তে ভাল পারফর্ম করছে এবং অন্য ইন্সট্যান্সে খারাপ পারফর্ম করছে। আপনাকে অবশ্যই ভাল এক্সিকিউশন প্ল্যান আইডি ক্যাপচার করতে হবে, plan_hash_value ,উদাহরণে ক্যোয়ারী যেখানে এটি ভাল কাজ করে।

এসকিউএল বেস প্ল্যান এক ইন্সট্যান্স থেকে অন্য ইন্সট্যান্সে কপি করুন

সোর্স ইনস্ট্যান্স থেকে টার্গেট ইনস্ট্যান্সে SQL বেস প্ল্যান কপি করতে নিম্নলিখিত ধাপগুলি ব্যবহার করুন:

  1. কোয়েরিটি সোর্স ইনস্ট্যান্সে চালান, যেখানে ক্যোয়ারীটি ভালভাবে কাজ করে, যাতে কার্সার ক্যাশে কোয়েরি বিদ্যমান থাকে।
  2. উৎস উদাহরণে, একটি বেসলাইন হিসাবে কার্সার ক্যাশে থেকে এসপিএম-এ কোয়েরির জন্য SQL এক্সিকিউশন প্ল্যান লোড করুন।
  3. উৎস উদাহরণে একটি স্টেজিং টেবিল তৈরি করুন। এই টেবিলটি সোর্স ইনস্ট্যান্স থেকে টার্গেট ইনস্ট্যান্সে এক্সিকিউশন প্ল্যান মাইগ্রেট করতে ব্যবহৃত হয়।
  4. সোর্স ইন্সট্যান্সের স্টেজিং টেবিলে সোর্স এক্সিকিউশন প্ল্যান বা বেসলাইন প্যাক করুন।
  5. এক্সপোর্ট/ইমপোর্ট ইউটিলিটি ব্যবহার করে সোর্স ইনস্ট্যান্স থেকে টার্গেট ইনস্ট্যান্সে স্টেজিং টেবিল স্থানান্তর করুন।
  6. স্টেজিং টেবিল থেকে SPM-এ টার্গেট ইন্সট্যান্সে SQL প্ল্যান আনপ্যাক করুন।
  7. নিশ্চিত করুন যে টার্গেট ইন্সট্যান্সে তৈরি করা বেসলাইনটি স্থির এবং পরবর্তী রানে এটি নির্বাচন করার জন্য গৃহীত হয়েছে৷
  8. টার্গেট ইন্সট্যান্সে পারফরম্যান্সের সমস্যা ছিল এমন SQL পরীক্ষা করুন এবং যাচাই করুন যে এটি স্থানান্তরিত বেসলাইন বেছে নিয়েছে।

উদাহরণ সম্পাদন

পূর্ববর্তী পদক্ষেপগুলি কার্যকর করার ফলে নিম্নলিখিত উদাহরণগুলির মতো আউটপুট পাওয়া যায়৷

ধাপ 1:সোর্স ইনস্ট্যান্সে কোয়েরি চালান

উত্স উদাহরণে SQL চালান এবং sql_id সনাক্ত করুন এবং plan_hash_value মান পেতে কার্সার ক্যাশে পরীক্ষা করুন। এই ক্ষেত্রে, তারা নিম্নলিখিত মান:

  • sql_id :9xva48wpnsmp6
  • plan_hash_value :1572948408)

উৎস উদাহরণে নিম্নলিখিত ক্যোয়ারীটি চালান:

SQL> select distinct plan_hash_value from v$sql where sql_id='9xva48wpnsmp6';

PLAN_HASH_VALUE
---------------
1572948408
 

ধাপ 2:পরিকল্পনাটি SPM এ লোড করুন

কার্সার ক্যাশে থেকে SPM-এ বেসলাইন হিসাবে এই ভাল ক্যোয়ারী এক্সিকিউশন প্ল্যান লোড করতে নিম্নলিখিত ক্যোয়ারীটি চালান:

SQL> set serveroutput on
SQL> declare
2   ret binary_integer;
     l_sql_id varchar2(13);
3
4   l_plan_hash_value number;
5   l_fixed varchar2(3);
6   l_enabled varchar2(3);
7   Begin
8   l_sql_id := '&&sql_id';
9   l_plan_hash_value := to_number('&&plan_hash_value');
10   l_fixed := 'Yes';
11   l_enabled := 'Yes';
12   ret := dbms_spm.load_plans_from_cursor_cache(
13       sql_id=>l_sql_id,
14       plan_hash_value=>l_plan_hash_value,
15       fixed=>l_fixed,
16       enabled=>l_enabled);
17   end;
18  /

Enter value for sql_id: 9xva48wpnsmp6
old   8:  l_sql_id := '&&sql_id';
new   8:  l_sql_id := '9xva48wpnsmp6';

Enter value for plan_hash_value: 1572948408
old   9:  l_plan_hash_value := to_number('&&plan_hash_value');
new   9:  l_plan_hash_value := to_number('1572948408');

PL/SQL procedure successfully completed.

আপনি উৎস উদাহরণে SQL বেসলাইন তৈরি করেছেন তা যাচাই করতে নিম্নলিখিত সংজ্ঞায়িত প্রশ্নগুলি চালান। পরবর্তী রেফারেন্সের জন্য নিম্নলিখিত বিশদ নোট করুন।

SQL> select count(*) from dba_sql_plan_baselines ;

COUNT(*)
--------
  1

SQL> select SQL_HANDLE, PLAN_NAME from dba_sql_plan_baselines;

SQL_HANDLE                     PLAN_NAME
------------------------------ ------------------------------
SQL_d344aac395f978a4           SQL_PLAN_d6j5asfazky54868c96c3
 

ধাপ 3:সোর্স ইনস্ট্যান্সে একটি স্টেজিং টেবিল তৈরি করুন

উত্স উদাহরণে একটি স্টেজিং টেবিল তৈরি করতে নিম্নলিখিত ক্যোয়ারীটি চালান:

SQL> sho user
USER is "SYS"
SQL> BEGIN
  DBMS_SPM.CREATE_STGTAB_BASELINE(
  table_name      => 'SPM_STAGETAB',
  table_owner     => 'APPS',
  tablespace_name => 'SYSAUX');
END;

2    3    4    5    6    7
8  /

PL/SQL procedure successfully completed.

ধাপ 4:বেসলাইন প্যাক করুন

সোর্স ইনস্ট্যান্সে স্টেজিং টেবিলে বেসলাইন প্যাক করতে নিম্নলিখিত ক্যোয়ারীটি চালান:

SQL> DECLARE
2      my_plans number;
3      BEGIN
4        my_plans := DBMS_SPM.PACK_STGTAB_BASELINE(
         table_name => 'SPM_STAGETAB',
         enabled => 'yes',
5
6
7        table_owner => 'APPS',
8        plan_name => 'SQL_PLAN_d6j5asfazky54868c96c3',
9      sql_handle => 'SQL_d344aac395f978a4');
10   END;
11  /

PL/SQL procedure successfully completed.
 

ধাপ 5:স্টেজিং টেবিলটি উত্স থেকে লক্ষ্য উদাহরণে স্থানান্তর করুন

সোর্স ইনস্ট্যান্সে স্টেজিং টেবিলের এক্সপোর্ট ব্যাকআপ নিতে নিম্নলিখিত কমান্ডটি চালান:

exp file=SPM_STAGETAB.dmp tables=APPS.SPM_STAGETAB log=SPM_STAGETAB.log compress=n
Export: Release 11.2.0.4.0 - Production on Sun Jun 3 13:14:50 2018
Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

Username: system/*******

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Export done in US7ASCII character set and AL16UTF16 NCHAR character set

About to export specified tables via Conventional Path ...
Current user changed to APPS
. . exporting table             SPM_STAGETAB	         1 rows exported
Export terminated successfully without warnings.
 

এখন, টার্গেট ইন্সট্যান্সে স্টেজিং টেবিলের এক্সপোর্ট ব্যাকআপ টার্গেট ইনস্ট্যান্সের হোস্টে স্থানান্তর করতে নিম্নলিখিত কমান্ডটি চালান এবং টার্গেট ইনস্ট্যান্সে টেবিলটি আমদানি করুন:

imp system file=SPM_STAGETAB.dmp log=imp_SPM_STAGETAB.log fromuser=apps touser=apps

Import: Release 11.2.0.4.0 - Production on Sun Jun 3 14:16:25 2018

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

Password:

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

Export file created by EXPORT:V11.02.00 via conventional path
import done in US7ASCII character set and AL16UTF16 NCHAR character set
. importing APPS's objects into APPS
. . importing table           "SPM_STAGETAB"   	       1 rows imported
Import terminated successfully without warnings.
 

ধাপ 6:বেসলাইন আনপ্যাক করুন

স্টেজিং টেবিল থেকে টার্গেট ইনস্ট্যান্সের SPM পর্যন্ত বেসলাইন আনপ্যাক করতে নিম্নলিখিত কমান্ডগুলি চালান। নিম্নলিখিত উদাহরণে, লক্ষ্যে বেসলাইনটি সঠিকভাবে আমদানি করা হয়েছে তা যাচাই করতে বেসলাইনটি আনপ্যাক করার আগে একটি গণনা নিন৷

SQL> select count(*) from dba_sql_plan_baselines;

COUNT(*)
--------
  2

SQL> SET SERVEROUTPUT ON
SQL> DECLARE
2      l_plans_unpacked  PLS_INTEGER;
3         BEGIN
4         l_plans_unpacked := DBMS_SPM.unpack_stgtab_baseline(
5               table_name      => 'SPM_STAGETAB',
6               table_owner     => 'APPS');
7
8            DBMS_OUTPUT.put_line('Plans Unpacked: ' || l_plans_unpacked);
9      END;
10  /
Plans Unpacked: 1

PL/SQL procedure successfully completed.

SQL> select count(*) from dba_sql_plan_baselines;

COUNT(*)
--------
  3
 

ধাপ 7:বেসলাইন যাচাই করুন

বেসলাইনটি গৃহীত এবং স্থির করা হয়েছে তা যাচাই করতে লক্ষ্যের উদাহরণে নিম্নলিখিত কমান্ডগুলি চালান৷

SQL> SELECT sql_handle, plan_name, enabled, accepted, fixed, origin FROM dba_sql_plan_baselines;

SQL_HANDLE            PLAN_NAME                      ENA ACC FIX ORIGIN
--------------------- ------------------------------ --- --- --- ------------
SQL_d344aac395f978a4  SQL_PLAN_d6j5asfazky54868c96c3 YES YES NO  MANUAL-LOAD

SQL>
 

পূর্ববর্তী আউটপুট দেখায় যে বেসলাইন টার্গেট ইন্সট্যান্সে আমদানি করা হয়েছিল কিন্তু এটি ঠিক করা হয়নি। বেসলাইন ঠিক করতে নিম্নলিখিত ক্যোয়ারীটি চালান এবং শুধুমাত্র এই প্ল্যানটি বেছে নিতে অপ্টিমাইজার সক্ষম করুন৷

<প্রি> SQL> DECLARE 2 l_plans_altered PLS_INTEGER; 3 BEGIN 4 l_plans_altered := DBMS_SPM.alter_sql_plan_baseline( 5 sql_handle => 'SQL_d344aac395f978a4', 6 PLAN_NAME => 'SQL_PLAN_d6j5asfazky54868c96c3', 7 ATTRIBUTE_NAME => 'fixed', 8 attribute_value => 'YES'); 9 10 DBMS_OUTPUT.put_line('Plans Altered: ' || l_plans_altered); 11 END; 12 / PL/SQL procedure successfully completed. SQL> SELECT sql_handle, plan_name, enabled, accepted, fixed, origin FROM dba_sql_plan_baselines; SQL_HANDLE PLAN_NAME ENA ACC FIX ORIGIN --------------------- ------------------------------ --- --- --- ------------ SQL_d344aac395f978a4 SQL_PLAN_d6j5asfazky54868c96c3 YES YES YES MANUAL-LOAD SQL>

ধাপ 8:টার্গেট ইন্সট্যান্সে SQL কোয়েরি পরীক্ষা করুন

এটি নতুন বেসলাইন তুলেছে কিনা তা যাচাই করতে লক্ষ্যের উদাহরণে নিম্নলিখিত কমান্ডটি চালান:

SQL> select SQL_PLAN_BASELINE from v$sql where sql_id='9xva48wpnsmp6';

SQL_PLAN_BASELINE
------------------------------
SQL_PLAN_d6j5asfazky54868c96c3
 

কিভাবে SQL প্ল্যান নির্বাচন করা হয়

নিম্নলিখিত চিত্রটি দেখায় যে কিভাবে একটি SQL প্ল্যান নির্বাচন করা হয় যখন একটি বেসলাইন প্ল্যান বিদ্যমান থাকে:

এসকিউএল প্ল্যান বেসলাইন ব্যবহার করে এসকিউএল প্ল্যান স্থানান্তর করুন

ছবির উৎস :মেটালিঙ্ক নোট স্বয়ংক্রিয় এসকিউএল প্ল্যান বেসলাইন (ডক আইডি 1930525.1)

উপসংহার

যদি আপনাকে একটি একক প্রশ্নের জন্য বেসলাইন স্থানান্তর করতে হয় তবে এই পোস্টের পদক্ষেপগুলি ব্যবহার করুন৷ আপনি আপগ্রেড, মাইগ্রেশন ইত্যাদির জন্য সমস্ত প্রশ্নের জন্য SQL বেসলাইন তৈরি করতে পারেন। সামঞ্জস্যপূর্ণ SQL এক্সিকিউশন প্ল্যান থাকতে এবং পারফরম্যান্স সংক্রান্ত কোনো সমস্যা এড়াতে SQL প্ল্যান বেসলাইন ব্যবহার করুন।

কোনো মন্তব্য করতে বা প্রশ্ন জিজ্ঞাসা করতে প্রতিক্রিয়া ট্যাবটি ব্যবহার করুন৷

আমাদের ডাটাবেস পরিষেবা এবং Rackspace অ্যাপ্লিকেশন পরিষেবাগুলি সম্পর্কে আরও জানুন৷


  1. একটি SQL সার্ভার এক্সিকিউশন প্ল্যান বোঝা

  2. Microsoft SQL সার্ভার হাইব্রিড বাফার পুল ব্যবহার করে

  3. একটি AWS RDS উদাহরণে একটি SQL সার্ভার ডাটাবেস স্থানান্তর করুন

  4. ওরাকল এসকিউএল প্রোফাইল এবং বেসলাইন