【ORACLE STA】sql_id方式优化SQL

ORACLE10G以后版本的SQL Tuning advisor可以从以下四个方面给出优化方案
  (1)为统计信息丢失或失效的对象收集统计信息
  (2)考虑优化器的任何数据偏差、复杂谓词或失效的统计信息
  (3)重新构建 SQL 以优化性能
  (4)提出新索引建议
下面来实际测试:
1、为SQL_id创建一个STA(SQL Tuning advisor)分析任务(使用SYS用户执行)
SQL> variable task_li_test varchar2(2000);
SQL>exec :task_li_test:=dbms_sqltune.create_tuning_task(sql_id=>'1z9atcd704psu',time_limit=>600,task_name=>'MyTask1');
2、执行上面创建的STA(需要一定的时间)
SQL> exec dbms_sqltune.execute_tuning_task(task_name=>'MyTask1');
3、查询优化任务创建与执行的情况
select a.owner, b.task_id, b.task_name, a.created
  from dba_advisor_tasks a, dba_advisor_log b
 where a.task_id = b.task_id
   and a.task_name = 'MyTask1';
 

owner

task_id

task_name

created

SYS

106698

    li_sql_1

2013-9-14 16:57

4、查看任务优化报告(优化的详细内容)
SQL>select dbms_sqltune.report_tuning_task('MyTask1') from dual;
5、接受建议的 SQL 概要文件,即创建SQL_Profle
SQL> 
execute dbms_sqltune.accept_sql_profile(task_name => 'MyTask1',task_owner =>'TEST', replace => TRUE);
6、查看第5步创建起来的SQL_Profile信息
SQL>select a.name, a.task_id, a.created  from dba_sql_profiles a, dba_advisor_log b
 where a.task_id = b.task_id
   and b.task_name = 'MyTask1';
 

NAME

TASK_ID

 CREATED

SYS_SQLPROF_01411bdf99410002

106699

    14-9月 -13 05.49.00.000000 下午

7、再次执行SQLID为‘1z9atcd704psu’的语句
7.1、执行时间由原来的6分钟降为3秒
7.2、查看执行计划,执行计划中包含下面信息,说明是使用了创建的SQL_Profile所起到的效果

8、删除SQL_Profile
SQL>exec dbms_sqltune.drop_sql_profile(name =>'SYS_SQLPROF_01411bdf99410002');
9、删除优化任务
SQL> exec dbms_sqltune.drop_tuning_task(task_name => 'MyTask1');

猜你喜欢

转载自blog.csdn.net/viviliving/article/details/84943508