SQL> alter system set optimizer_capture_sql_plan_baselines=FALSE
2 ;
システムが変更されました。
SQL> alter system set optimizer_use_sql_plan_baselines=TRUE
2 ;
システムが変更されました。
SQL> set lin 200
SQL> COLUMN name FORMAT A40
SQL> COLUMN value FORMAT A5
SQL> select name,value from v$parameter where name like'%sql_plan%' order by name
2 ;
NAME VALUE
---------------------------------------- -----
optimizer_capture_sql_plan_baselines FALSE
optimizer_use_sql_plan_baselines TRUE
SQL>
select t.SIGNATURE
,t.SQL_HANDLE -- これを後に使用します
,t.PLAN_NAME
,t.CREATOR
,t.CREATED
,t.MODULE
,t.ORIGIN
,t.ACCEPTED
,t.EXECUTIONS
--,t.SQL_TEXT
from dba_sql_plan_baselines t
where t.ACCEPTED ='YES'
order by t.CREATED desc
;
select t.SIGNATURE
,t.SQL_HANDLE -- これを後に使用します
,t.PLAN_NAME
,t.CREATOR
,t.CREATED
,t.MODULE
,t.ORIGIN
,t.ACCEPTED
,t.EXECUTIONS
--,t.SQL_TEXT
from dba_sql_plan_baselines t
where t.ACCEPTED ='YES'
order by t.CREATED desc
;
declare
aa number;
begin
aa:= DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE (
sql_id =>'1wykrqt6a3r0y',
sql_handle => 'SQL_81de8173c820318d');
end;
declare
aa number;
begin
aa:= DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE (
sql_id =>'1wykrqt6a3r0y',
sql_handle => 'SQL_81de8173c820318d');
end;
手順6.ヒント句付き新プラン登録の確認
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
SELECT
b.SIGNATURE
,b.SQL_HANDLE
,b.PLAN_NAME
--,b.SQL_TEXT
,b.CREATED
,b.ORIGIN
,b.ACCEPTED
,b.EXECUTIONS
FROM dba_sql_plan_baselines b
where b.SQL_HANDLE='SQL_81de8173c820318d'
and b.ORIGIN='MANUAL-LOAD-FROM-CURSOR-CACHE'
order by b.CREATEDdesc
;
SELECT
b.SIGNATURE
,b.SQL_HANDLE
,b.PLAN_NAME
--,b.SQL_TEXT
,b.CREATED
,b.ORIGIN
,b.ACCEPTED
,b.EXECUTIONS
FROM dba_sql_plan_baselines b
where b.SQL_HANDLE='SQL_81de8173c820318d'
and b.ORIGIN='MANUAL-LOAD-FROM-CURSOR-CACHE'
order by b.CREATED desc
;
SELECT
b.SIGNATURE
,b.SQL_HANDLE
,b.PLAN_NAME
--,b.SQL_TEXT
,b.CREATED
,b.ORIGIN
,b.ACCEPTED
,b.EXECUTIONS
FROM dba_sql_plan_baselines b
where b.SQL_HANDLE='SQL_81de8173c820318d'
and b.ORIGIN='MANUAL-LOAD-FROM-CURSOR-CACHE'
order by b.CREATED desc
;
SIGNATURE
9358059410001244557
9358059410001244557
SQL_HANDLE
SQL_81de8173c820318d
SQL_81de8173c820318d
PLAN_NAME
SQL_PLAN_83rn1fg420ccd2720d6b7
SQL_PLAN_83rn1fg420ccd441fc3ea
CREATED
2021-06-22 23:31:47
2021-06-22 23:29:50
ORIGIN
MANUAL-LOAD-FROM-CURSOR-CACHE
MANUAL-LOAD-FROM-CURSOR-CACHE
ACCEPTED
YES
YES
EXECUTIONS
1
72399
手順7.不要なベースラインの削除
SQLプラン名とSQL_HANDLEをキーにベースラインを削除する
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
declare
aa number;
begin
aa:= DBMS_SPM.DROP_SQL_PLAN_BASELINE(
sql_handle =>'SQL_81de8173c820318d',
plan_name => 'SQL_PLAN_83rn1fg420ccd441fc3ea');
end;
declare
aa number;
begin
aa:= DBMS_SPM.DROP_SQL_PLAN_BASELINE(
sql_handle =>'SQL_81de8173c820318d',
plan_name => 'SQL_PLAN_83rn1fg420ccd441fc3ea');
end;
declare
aa number;
begin
aa:= DBMS_SPM.DROP_SQL_PLAN_BASELINE(
sql_handle =>'SQL_81de8173c820318d',
plan_name => 'SQL_PLAN_83rn1fg420ccd441fc3ea');
end;
FORCURIN (select SQL_HANDLE,PLAN_NAME from dba_sql_plan_baselines order byCREATEDdesc fetch first 10 rows only ) LOOP
exesql := 'declare aa number; begin aa:= DBMS_SPM.DROP_SQL_PLAN_BASELINE(sql_handle =>'''|| CUR.SQL_HANDLE||''',plan_name => '''|| CUR.PLAN_NAME||'''); end;';
EXECUTEIMMEDIATE exesql;
DBMS_OUTPUT.PUT_LINE(exesql);
ENDLOOP;
END;
declare
exesql varchar2(800);
BEGIN
FOR CUR IN (select SQL_HANDLE,PLAN_NAME from dba_sql_plan_baselines order by CREATED desc fetch first 10 rows only ) LOOP
exesql := 'declare aa number; begin aa:= DBMS_SPM.DROP_SQL_PLAN_BASELINE(sql_handle =>'''|| CUR.SQL_HANDLE||''',plan_name => '''|| CUR.PLAN_NAME||'''); end;';
EXECUTE IMMEDIATE exesql;
DBMS_OUTPUT.PUT_LINE(exesql);
END LOOP;
END;
declare
exesql varchar2(800);
BEGIN
FOR CUR IN (select SQL_HANDLE,PLAN_NAME from dba_sql_plan_baselines order by CREATED desc fetch first 10 rows only ) LOOP
exesql := 'declare aa number; begin aa:= DBMS_SPM.DROP_SQL_PLAN_BASELINE(sql_handle =>'''|| CUR.SQL_HANDLE||''',plan_name => '''|| CUR.PLAN_NAME||'''); end;';
EXECUTE IMMEDIATE exesql;
DBMS_OUTPUT.PUT_LINE(exesql);
END LOOP;
END;
手順8.不要なベースラインが削除されたことを確認
SQL_HANDLEをキーに確認する
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
select
b.SIGNATURE
,b.SQL_HANDLE
,b.PLAN_NAME
--,b.SQL_TEXT
,b.CREATED
,b.VERSION
,b.CREATOR
,b.CREATED
,b.MODULE
,b.ORIGIN
,b.ACCEPTED
,b.EXECUTIONS
FROM dba_sql_plan_baselines b
where b.SQL_HANDLE='SQL_81de8173c820318d'
order by b.CREATED
;
select
b.SIGNATURE
,b.SQL_HANDLE
,b.PLAN_NAME
--,b.SQL_TEXT
,b.CREATED
,b.VERSION
,b.CREATOR
,b.CREATED
,b.MODULE
,b.ORIGIN
,b.ACCEPTED
,b.EXECUTIONS
FROM dba_sql_plan_baselines b
where b.SQL_HANDLE='SQL_81de8173c820318d'
order by b.CREATED
;
select
b.SIGNATURE
,b.SQL_HANDLE
,b.PLAN_NAME
--,b.SQL_TEXT
,b.CREATED
,b.VERSION
,b.CREATOR
,b.CREATED
,b.MODULE
,b.ORIGIN
,b.ACCEPTED
,b.EXECUTIONS
FROM dba_sql_plan_baselines b
where b.SQL_HANDLE='SQL_81de8173c820318d'
order by b.CREATED
;
select
t.INST_ID
,t.SQL_ID
,t.CHILD_NUMBER
,t.ADDRESS
,t.HASH_VALUE
,t.PLAN_HASH_VALUE
,t.SQL_PLAN_BASELINE
,t.FIRST_LOAD_TIME
,t.PARSING_SCHEMA_NAME
from gv$sql t
where t.SQL_ID = 'g7j2u2mg11752'
order by t.INST_ID,t.CHILD_NUMBER
;
select
t.INST_ID
,t.SQL_ID
,t.CHILD_NUMBER
,t.ADDRESS
,t.HASH_VALUE
,t.PLAN_HASH_VALUE
,t.SQL_PLAN_BASELINE
,t.FIRST_LOAD_TIME
,t.PARSING_SCHEMA_NAME
from gv$sql t
where t.SQL_ID = 'g7j2u2mg11752'
order by t.INST_ID,t.CHILD_NUMBER
;
おまけ1:PLAN_NAMEから実際のプラン内容を確認する
上記手順4で新しく登録したSQLの実行プランを確認できます。
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
select * fromtable(
dbms_xplan.display_sql_plan_baseline(
plan_name=>'SQL_PLAN_83rn1fg420ccd2720d6b7',
format=>'basic'
)
)
select * from table(
dbms_xplan.display_sql_plan_baseline(
plan_name=>'SQL_PLAN_83rn1fg420ccd2720d6b7',
format=>'basic'
)
)
select * from table(
dbms_xplan.display_sql_plan_baseline(
plan_name=>'SQL_PLAN_83rn1fg420ccd2720d6b7',
format=>'basic'
)
)