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_STATISTICSSELECT * FROM DBA_SQLTUNE_BINDS
SELECT * FROM DBA_SQLTUNE_PLANS WHERE TASK_ID=&id