ITPub博客

首页 > Linux操作系统 > Linux操作系统 > Sql tuning advisor

Sql tuning advisor

原创 Linux操作系统 作者:to_be_dba 时间:2013-01-22 20:10:02 0 删除 编辑

我们都知道,对于一条提交的语句,oracle会使用优化器来生成执行计划。而优化器其实是有两种模式的。在正常模式下,优化器编译sql语句并生成执行计划,时间上的限制是非常严格的,通常不到一秒钟完成;

在调优模式下,优化器会进行额外的操作来判断接收到的语句是否还有优化的空间,这时候优化器输出的不是执行计划,而是一系列的操作以及这些操作之间的关系,目的在于产生更好的执行计划。在调优模式下,优化器可以被称为自动调优优化器。

输入与输出总是成比例的,既然使用调优模式希望生成更优的计划,就会花费更多的时间和资源,而且每次操作都是硬解析。因此,不要在系统上轻易开启调优模式,生产系统几乎不允许。可以在测试环境下比较后再上线。

 

自动性能优化器主要通过统计信息的分析、sql profiling、执行路径分析、sql结构分析以及当前与历史性能数据的对比分析来优化性能。

 

优化器是根据统计数据来生成执行计划的,因此需要保证统计数据的准确性和完整性。自动性能优化器会在获取语句后判断统计信息是否足够、“新鲜”,并根据判断来决定是否需要收集统计信息、使用辅助统计数据。

Sql profile是一条语句的一系列辅助数据(可能是一个表或一个索引的统计数据),数据库可以使用这些信息来改善执行计划。

执行路径方面,如果自动性能优化器发现创建一个新的索引能够提高查询性能,就会推荐创建索引。但由于自动性能优化器不能对创建索引对整个sql负载做出评价,推荐不一定准确,因此推荐在正常负载情况下(有代表性的时段)对语句运行sql access advisor,该工具能根据创建新索引对整个sql的影响来做出推荐。

语句结构方面,oracle判断语句在语法、语义上是否有改进的可能。比如对不可能出现重复值的两个查询使用union,性能优化器可能就会建议改成使用union all。

如果优化器发现新生成的计划与原来的计划不一样,就会根据其成本做出选择。如果不希望优化器这么做,而是告诉它出现新的执行计划时仍使用原来的执行计划,可以通过基线来实现。

 

自动性能调优是在系统维护窗口(特定的时间段)对AWR报告中的高负载的sql自动进行的,维护窗口的起止时间、频率等信息是可以手工调节的,通常不会多于一小时。对于性能相差三倍以上的语句,自动sql优化建议器给出提示,如果这还是sql profiles造成的性能差异,且accept_sql_profiles设置为true,则自动创建profile。

 

自动sql调优在维护窗口自动运行,启停方法为:

启用:

BEGIN

DBMS_AUTO_TASK_ADMIN.ENABLE(

client_name => 'sql tuning advisor',

operation => NULL,

window_name => NULL);

END;

/

禁用:

DBMS_AUTO_TASK_ADMIN package:

BEGIN

DBMS_AUTO_TASK_ADMIN.DISABLE(

client_name => 'sql tuning advisor',

operation => NULL,

window_name => NULL);

END;

/

注:dbms_auto_sqltune包的执行需要dba权限,

EXECUTE_AUTO_TUNING_TASK的执行只能是sys用户,版本要求为11.2.0.2及以上

 

查看最近一次语句分析后,所有的sql语句建议:

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;

/

PRINT :my_rept

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

下一篇: sql tuning set
请登录后发表评论 登录
全部评论

注册时间:2011-11-23

  • 博文量
    170
  • 访问量
    484887