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

Popular posts from this blog

How To Purge Optimizer Statistics Advisor Old Records From 12.2 Onwards (Doc ID 2660128.1)

Oracle session snapper

Oracle Materialized View In-Depth and Materialized View refresh issues in 19c