11g新特性automatic sql tuning advisor

何为自动sql tuning
优化器有两种工作模式:普通模式(normal mode)和调优模式(tuning mode),前者为默认行为,后者需要执行一系列额外工作检验普通模式下生成的执行计划是否最优;
调优模式的输出并非一个执行计划,而是一系列action,处于该模式下的优化器称为自动调优优化器(automatic tuning optimizer),其行为被称作自动sql调优(automatic sql tuning);
用户可以调用sql tuning advisor提供的dbms_sqltune包实现,其输入源包括sql id/sql text/cursor cache/AWR/sql tuning set;
11g将其封装成job自动运行,称为automatic sql tuning advisor;
其将AWR中的top sql作为输入源,对候选sql逐个调用sql tuning advisor,当accept_sql_profiles=true且其能明显改善当前sql时,会自动接受;

自动sql调优包含4种调优分析(tuning analysis)手段
统计信息分析(statistics analysis)
如果sql中的表或索引统计信息缺失或无效,自动调优优化器会输出如下两种信息
收集统计信息的建议; 
辅助统计信息,存储该信息的对象为sql profile;
sql profiling
profile不包含具体的执行计划,而是一系列sql辅助信息的集合,以供优化器产生更优执行计划;
可以在不改变sql text的前提下选择更优执行计划,比起hint/stored outline又不会为sql锁死一个sql plan,优化器可以选择其他更优的执行计划;
其输出为接受sql profile的建议,一旦接受该profile就存储于数据字典;
profile可分为多个category(默认null),每个会话可根据sqltun_category设置选择不同种类的profile
访问路径分析access path analysis
sql structure 分析

手工调用dbms_sqltune案例 参考  http://space.itpub.net/15480802/viewspace-710769

下面简述一下automatic sql tuning advisor
其工作流程如下
 
可手工激活或禁止
BEGIN
  DBMS_AUTO_TASK_ADMIN.ENABLE(
    client_name => 'sql tuning advisor', 
    peration => NULL, 
    window_name => NULL);
END;
/
BEGIN
  DBMS_AUTO_TASK_ADMIN.DISABLE(
    client_name => 'sql tuning advisor', 
    peration => NULL, 
    window_name => NULL);
END;
/
有一系列参数可供定制,比如是否自动接受profile
Parameter Description

ACCEPT_SQL_PROFILE

Specifies whether to accept SQL profiles automatically.

EXECUTION_DAYS_TO_EXPIRE

Specifies the number of days for which to save the task history in the advisor framework schema. By default, the task history is saved for 30 days before it expires.

MAX_SQL_PROFILES_PER_EXEC

Specifies the limit of SQL profiles that are accepted for each automatic SQL tuning task. Consider setting the limit of SQL profiles that are accepted for each automatic SQL tuning task based on the acceptable level of changes that can be made to the system on a daily basis.

MAX_AUTO_SQL_PROFILES

Specifies the limit of SQL profiles that are accepted in total.

BEGIN
  DBMS_AUTO_SQLTUNE.SET_AUTO_TUNING_TASK_PARAMETER(
    parameter => 'ACCEPT_SQL_PROFILES', value => 'TRUE');
END;
/
可通过DBMS_AUTO_SQLTUNE.REPORT_AUTO_TUNING_TASK查看报告
VARIABLE my_rept CLOB;
BEGIN
  :my_rept :=DBMS_AUTO_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 Profile
A collection of information that enables the query optimizer to create an optimal execution plan for a SQL statement.
可以在不改变sql text的前提下选择更优执行计划,且相比hint/stored outline又不会冻结该计划,当优化器发现更优解时可重新选择;可以通过stage表传输到其他数据库


什么是SQL Tuning Set (STS)
A database object that includes one or more SQL statements along with their execution statistics and execution context.
当生产库遭遇poor sql时,可创建STS并传输到测试库(>=10gR2)进行调优,使用dbms_sqltune创建;

使用CAPTURE_CURSOR_CACHE_SQLSET可定时捕获cursor cache中的所有工作负载,相比之下AWR只捕获top sql


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/15480802/viewspace-759561/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/15480802/viewspace-759561/

你可能感兴趣的:(11g新特性automatic sql tuning advisor)