Oracle Sql Access advisor for sqlid using Sql tuing Set
Advantages for optimizing query performance and system efficiency.
Enhancing Performance:
Manually running the SQL Tuning Advisor can identify query bottlenecks and suggest improvements. This could result in faster execution times and improved user experience.
Query Optimization:
This tool analyzes query execution plans and proposes alternate solutions based on factors such as indexes, stats, and database settings.
Cost Savings:
Poorly performing queries that use up too many resources can be identified and optimized, leading to savings through better hardware utilization.
Proactive Maintenance:
Check for potential performance issues before they hit your production environment by regularly analyzing and tuning queries.
Learning Opportunities:
Find out about query optimization techniques and best practices by studying the SQL Tuning Advisor’s recommendations.
1) Creating SQL Tuning Sets
SQL Tuning Sets (STS) are essential for storing SQL statements along with their execution context.
These sets serve as input for SQL Access Advisor. Creating an STS involves defining the set and loading it with relevant SQL statements from your workload.
EXEC DBMS_SQLTUNE.CREATE_SQLSET(sqlset_name => 'atfz4c63at1k1_STS01', description => 'Tuning set for sales queries');
2) Loading SQL Tuning Sets
Populate the STS with SQL statements from your workload. This step ensures that the SQL Access Advisor has accurate and comprehensive data for analysis.
==> FROM SHARED SQL AREA
DECLARE
CUR SYS_REFCURSOR;
BEGIN
OPEN CUR FOR
SELECT VALUE(P) FROM TABLE (DBMS_SQLTUNE.SELECT_CURSOR_CACHE('sql_id = ''atfz4c63at1k1''')) p;
DBMS_SQLTUNE.LOAD_SQLSET(SQLSET_NAME=> 'atfz4c63at1k1_STS01', POPULATE_CURSOR=>CUR);
CLOSE CUR;
END;
/
==> FROM AWR
DECLARE
CUR SYS_REFCURSOR;
BEGIN
OPEN CUR FOR
SELECT VALUE(P) FROM TABLE ( DBMS_SQLTUNE.SELECT_WORKLOAD_REPOSITORY(BEGIN_SNAP=>1939, END_SNAP=>1940, BASIC_FILTER=> 'sql_id = ''atfz4c63at1k1''', ATTRIBUTE_LIST=>'ALL' )) p;
DBMS_SQLTUNE.LOAD_SQLSET(SQLSET_NAME=> 'atfz4c63at1k1_STS01', POPULATE_CURSOR=>CUR);
CLOSE CUR;
END;
/
SELECT * FROM TABLE(DBMS_SQLTUNE.SELECT_SQLSET(SQLSET_NAME => 'atfz4c63at1k1_STS01'));
==> Below is not part of creating sql baseline ( do not perform this for sql access)
DECLARE
MY_PLANS PLS_INTEGER;
BEGIN
MY_PLANS := DBMS_SPM.LOAD_PLANS_FROM_SQLSET(SQLSET_NAME=>'atfz4c63at1k1_STS01', BASIC_FILTER=> 'PLAN_HASH_VALUE= ''3811430562''' );
END;
/
select * from dba_sql_plan_baselines;
select * from dba_sqlset WHERE name='atfz4c63at1k1_STS01'
3) Executing SQL Access Advisor Tasks
Define and execute tasks to generate recommendations.
This process involves creating a task, setting its parameters, linking it to an STS, and executing it.
DECLARE
task_id NUMBER;
task_name VARCHAR2(255);
BEGIN
task_name := 'my_sql_optimization_task';
DBMS_ADVISOR.CREATE_TASK('SQL Access Advisor', task_id, task_name);
DBMS_ADVISOR.SET_TASK_PARAMETER(task_name, 'ANALYSIS_SCOPE', 'ALL');
DBMS_ADVISOR.ADD_STS_REF(task_name, 'SH', 'atfz4c63at1k1_STS01');
/* Set Task Parameters */
dbms_advisor.set_task_parameter(task_name,'ANALYSIS_SCOPE','ALL');
dbms_advisor.set_task_parameter(task_name,'RANKING_MEASURE','PRIORITY,OPTIMIZER_COST');
dbms_advisor.set_task_parameter(task_name,'DEF_PARTITION_TABLESPACE',DBMS_ADVISOR.ADVISOR_UNUSED);
dbms_advisor.set_task_parameter(task_name,'TIME_LIMIT',10000);
dbms_advisor.set_task_parameter(task_name,'MODE','LIMITED');
dbms_advisor.set_task_parameter(task_name,'STORAGE_CHANGE',DBMS_ADVISOR.ADVISOR_UNLIMITED);
dbms_advisor.set_task_parameter(task_name,'DML_VOLATILITY','TRUE');
dbms_advisor.set_task_parameter(task_name,'WORKLOAD_SCOPE','PARTIAL');
dbms_advisor.set_task_parameter(task_name,'DEF_INDEX_TABLESPACE',DBMS_ADVISOR.ADVISOR_UNUSED);
dbms_advisor.set_task_parameter(task_name,'DEF_INDEX_OWNER',DBMS_ADVISOR.ADVISOR_UNUSED);
dbms_advisor.set_task_parameter(task_name,'DEF_MVIEW_TABLESPACE',DBMS_ADVISOR.ADVISOR_UNUSED);
dbms_advisor.set_task_parameter(task_name,'DEF_MVIEW_OWNER',DBMS_ADVISOR.ADVISOR_UNUSED);
dbms_advisor.set_task_parameter(task_name,'DEF_MVLOG_TABLESPACE',DBMS_ADVISOR.ADVISOR_UNUSED);
dbms_advisor.set_task_parameter(task_name,'CREATION_COST','TRUE');
dbms_advisor.set_task_parameter(task_name,'JOURNALING','4');
dbms_advisor.set_task_parameter(task_name,'DAYS_TO_EXPIRE','30');
DBMS_ADVISOR.EXECUTE_TASK(task_name);
END;
/
SELECT rec_id, rank, benefit FROM USER_ADVISOR_RECOMMENDATIONS WHERE task_name = 'my_sql_optimization_task' ORDER BY rank;
Comments
Post a Comment