11g新特性-自动sql调优(Automatic SQL Tuning)

Posted 王超元

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了11g新特性-自动sql调优(Automatic SQL Tuning)相关的知识,希望对你有一定的参考价值。

11g新特性-自动sql调优(Automatic SQL Tuning)

在Oracle 10g中,引进了自动sql调优特性。此外,ADDM也会监控捕获高负载的sql语句。

在Oracle 11g中,通过运行sql tuning advisor加强了自动sql调优功能。默认情况下是每天夜间通过自动任务的方式运行”自动sql调优“。

 

自动sql调优的过程:

1.识别需要调优的sql语句  根据AWR中的CPU和I/O负载来识别

2.调优,生成新的sql profile  

  在维护窗口(maintenance window),自动sql调优任务运行时,上一步识别出的sql语句会被“sql tuning advisor”调优。并产生相应的sql profiles。如果发现有统计信息丢失或过期,会通知GATHER_STATS_JOB

3.测试新的sql profile  benefit%=(time_old – time_new)/(time_old)

4.执行符合标准的新的sql profile  

  可以查看dba_sql_profiles,有哪些sql profiles是被数据库自动执行的(type 列)

5.DBA可以产生自动sql调优活动的报告。可以确认产生的sql profile是否有效、删除新产生的sql profile等。

自动sql调优不会进行调优的sql:

-Ad hoc语句和很少重复执行的sql

-并行查询

-长时间运行的查询。对于长时间运行的sql,如果使用产生的sql profile进行测试,还是会需要长时间运行,就会忽略这样的sql。如果使用新产生的sql profile会显著减少时间,就不会忽略这类长时间运行的sql。

-递归sql

-DDL语句

-使用了insert、delete的DML语句 上面的语句,可以手动使用SQL Tuning Advisor进行调优。

上面的语句,可以手动使用SQL Tuning Advisor进行调优。

 

配置自动sql调优

使用dbms_sqltune包进行配置。 在maintenance window,自动sql调优特性会启动一个job(sys_auto_sql_tuning_task)。产生一个需要调优的sql 列表,然后根据重要性一次进行调优。 一般这个job会运行一小时,可以设置该job设置: dbms_sqltune.set_tuning_task_parameter(\'SYS_AUTO_SQL_TUNING_TASK\',\'TIME_LIMIT\',7200);

复制代码
begin
    dbms_sqltune.set_tuning_task_parameter(\'SYS_AUTO_SQL_TUNING_TASK\',\'LOCAL_TIME_LIMIT\',1400);
    dbms_sqltune.set_tuning_task_parameter(\'SYS_AUTO_SQL_TUNING_TASK\',\'ACCEPT_SQL_PROFILES\',\'TRUE\');
    dbms_sqltune.set_tuning_task_parameter(\'SYS_AUTO_SQL_TUNING_TASK\',\'MAX_SQL_PROFILES_PER_EXEC\',50);
    dbms_sqltune.set_tuning_task_parameter(\'SSY_AUTO_SQL_TUNING_TASK\',\'MAX_AUTO_SQL_PROFILES\',10002);
end;
复制代码

 管理自动sql调优任务

1.开启自动sql调优

复制代码
begin
     dbms_auto_task_admin.enable(
          client_name => \'sql tuning advisor\',
          operation => \'NULL\',#在所有维护窗口都开启
          window_name => \'NULL\');
end;
复制代码

2.关闭自动sql调优

复制代码
begin
     dbms_auto_task_admin.disable(
          client_name => \'sql tuning advisor\',
          operation => \'NULL\',
          window_name => \'NULL\');
end;
复制代码

生成文本格式的自动sql调优建议报告:

复制代码
SQL> variable my_rept CLOB;
SQL> begin 
     :my_rept := dbms_sqltune.report_auto_tuning_task(
          begin_exec=>NULL,
          end_exec=>NULL,
          type=>\'TEXT\',
          level=> \'TYPICAL\',
          section=>\'ALL\',
          object_id=>NULL,
          result_limit=>NULL);
     end;
SQL> print :my_rept
复制代码

相关视图:

-DBA_ADVISOR_EXECUTIONS
-DBA_ADVISOR_SQLSTATS
-DBA_ADVISOR_SQLPLANS  

 

以上是关于11g新特性-自动sql调优(Automatic SQL Tuning)的主要内容,如果未能解决你的问题,请参考以下文章

11g新特性-SQL Plan Management

Oracle 19c 新特性 Automatic indexing 自动化索引

自动检查点(Automatic Checkpointing)

Oracle 11g 新特性 -- SQL Plan Management 说明

oracle11g中SQL优化(SQL TUNING)新特性之SQL Plan Management(SPM)

Oracle 11g 新特性:自动创建分区(Interval Partition)