Automatic SQL tuning and SQL Profile

Automatic SQL Tuning process in Oracle


1. 察看是否启用SQL TUNING ADVISOR

select client_name,status from DBA_AUTOTASK_CLIENT; 

select name,currently_used,last_usage_date,description from dba_feature_usage_statistics where name ='Automatic SQL Tuning Advisor'

2.察看任务执行情况

select task_name,status,to_char(execution_end,'DD-MON-YY HH24:MI') from 
dba_advisor_executions where task_name='SYS_AUTO_SQL_TUNING_TASK' order by 

execution_end;

3.生成自动优化任务

declare

my_task_name VARCHAR2(30);

my_sqltext CLOB;

begin

my_sqltext := ‘<调优的SQL语句文本>’;

my_task_name := DBMS_SQLTUNE.CREATE_TUNING_TASK(

sql_text => my_sqltext,

user_name => ‘<用户名>’,

scope => ‘COMPREHENSIVE’,

time_limit => 60,

task_name => ‘task1’,

description => ‘Task to tune a query);

end;

/


4.执行自动优化任务

begin

DBMS_SQLTUNE.EXECUTE_TUNING_TASK( task_name => ‘task1’);

end;

/

5. 查看Oracle产生的自动优化报告

DECLARE

my_sqlprofile_name VARCHAR2(30);

begin

my_sqlprofile_name := DBMS_SQLTUNE.ACCEPT_SQL_PROFILE (

task_name => ‘task1’,

name => ‘plan_test’);

end;

/


6. 运行需要调优的语句,察看优化后的结果, 计划使用了sql profile plan_test

ACCEPT_SQL_PROFILES  is true, the database accepts the SQL profile. when you run the sql, it will use the new plan to get data.

7.SQL Profiling



alter system flush shared_pool;

select * from dba_sql_profiles;

SELECT DBMS_SQLTUNE.REPORT_TUNING_TASK('task1') FROM DUAL;

8. Usefull views

           SELECT * FROM USER_ADVISOR_TASKS T WHERE TASK_NAME='task_name';

            SELECT * FROM DBA_SQLTUNE_STATISTICS
            SELECT * FROM DBA_SQLTUNE_BINDS
            SELECT * FROM DBA_SQLTUNE_PLANS WHERE TASK_ID=&id

猜你喜欢

转载自blog.csdn.net/xiadingling/article/details/80060530