In another post How to Create SQL Plan Baseline from Cursor Cache. Here we will demonstrate how to create SQL plan baseline from AWR.
By using the SQL in Find Oracle SQL Execution History Details, we get the best execution plan for sql_id=’6fqb4wf9sgfyv’ and plan_hash_value= 815656277.
Create STS ( SQL Tuning Set )
BEGIN
DBMS_SQLTUNE.CREATE_SQLSET (
sqlset_name => 'STS_6fqb4wf9sgfyv',
description => 'SQL Tuning Set for 6fqb4wf9sgfyv');
END;
Load the Good Plan into STS
DECLARE
cur sys_refcursor;
BEGIN
OPEN cur FOR
SELECT VALUE(P)
FROM TABLE( dbms_sqltune.select_workload_repository(begin_snap=>101300,end_snap=>101304,basic_filter=>'sql_id = ''6fqb4wf9sgfyv''',attribute_list=>'ALL')
) p;
DBMS_SQLTUNE.LOAD_SQLSET( sqlset_name=> 'STS_6fqb4wf9sgfyv', populate_cursor=>cur);
CLOSE cur;
END;
/
PL/SQL procedure successfully completed.
Check the Good SQL Loaded into STS
SQL> select OWNER,NAME,DESCRIPTION,STATEMENT_COUNT from DBA_SQLSET where OWNER='SYS' and NAME='STS_6fqb4wf9sgfyv';
OWNER NAME
------------------------------ ------------------------------
DESCRIPTION STATEMENT_COUNT
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------
SYS STS_6fqb4wf9sgfyv
SQL Tuning Set for 6fqb4wf9sgfyv 1
SQL> select * from table(dbms_xplan.display_sqlset('STS_6fqb4wf9sgfyv','6fqb4wf9sgfyv')); ... .. .
Load the Plan From STS
SQL> DECLARE
good_plans pls_integer;
BEGIN
good_plans := DBMS_SPM.LOAD_PLANS_FROM_SQLSET(
sqlset_name => 'STS_6fqb4wf9sgfyv',
basic_filter=>'plan_hash_value = ''815656277'''
);
END;
/
PL/SQL procedure successfully completed.
Check the Plan Loaded Successfully
SQL> select SQL_HANDLE,PLAN_NAME,ENABLED,ACCEPTED,FIXED,REPRODUCED,AUTOPURGE,OPTIMIZER_COST , EXECUTIONS,ELAPSED_TIME,CPU_TIME from DBA_SQL_PLAN_BASELINES where SQL_TEXT like 'SELECT O.ORDER_ID, O.ORDER_RE%';
SQL_HANDLE PLAN_NAME ENA ACC FIX REP AUT OPTIMIZER_COST EXECUTIONS ELAPSED_TIME CPU_TIME
------------------------------ ------------------------------ --- --- --- --- --- -------------- ---------- ------------ ----------
SQL_4e7889c88773e98f SQL_PLAN_4wy49t23r7ucgbe7808e2 YES YES NO YES YES 229777 1 61311779 53542413
SQL> SELECT * FROM TABLE(DBMS_XPLAN.display_sql_plan_baseline(plan_name=>'SQL_PLAN_4wy49t23r7ucgbe7808e2'));
SQL> SELECT * FROM TABLE(DBMS_XPLAN.display_sql_plan_baseline(sql_handle=>'SQL_4e7889c88773e98f'));