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',);
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',);
dbms_sqltune.set_tuning_task_parameter('SSY_AUTO_SQL_TUNING_TASK','MAX_AUTO_SQL_PROFILES',);
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)的更多相关文章

  1. 《高性能SQL调优精要与案例解析》一书谈主流关系库SQL调优(SQL TUNING或SQL优化)核心机制之——索引(index)

    继<高性能SQL调优精要与案例解析>一书谈SQL调优(SQL TUNING或SQL优化),我们今天就谈谈各主流关系库中,占据SQL调优技术和工作半壁江山的.最重要的核心机制之一——索引(i ...

  2. 《高性能SQL调优精要与案例解析》一书谈SQL调优(SQL TUNING或SQL优化)学习

    <高性能SQL调优精要与案例解析>一书上市发售以来,很多热心读者就该书内容及一些具体问题提出了疑问,因读者众多外加本人日常工作的繁忙 ,在这里就SQL调优学习进行讨论并对热点问题统一作答. ...

  3. Oracle中SQL调优(SQL TUNING)之最权威获取SQL执行计划大全

    该文档为根据相关资料整理.总结而成,主要讲解Oracle数据库中,获取SQL语句执行计划的最权威.最正确的方法.步骤,此外,还详细说明了每种方法中可选项的意义及使用方法,以方便大家和自己日常工作中查阅 ...

  4. MSSQL2012中SQL调优(SQL TUNING)时CBO支持和常用的hints

    虽然当前各关系库CBO都已经非常先进和智能,但因为关系库理论和实现上的限制,CBO在特殊场景下也会给出次优甚至存在严重性能问题的执行计划,而这些场景中,有一部分只能或适合通过关系库提供的hints来进 ...

  5. 一个典型的多表参与连接的复杂SQL调优(SQL TUNING)引发的思考

    今天在看崔华老师所著SQL优化一书时,看到他解决SQL性能问题的一个案例,崔华老师成功定位问题并进行了解决.这里,在崔华老师分析定位的基础上,做进一步分析和推理,以便大家一起研究探讨,下面简述该案例场 ...

  6. SQL调优(SQL TUNING)之远程支持完成性能大幅优化

    前几天,一个朋友找到我,说一个SQL性能有问题,看看能不能优化,下面为过程: 雪豹 9:35:10 在吗 兰花岛主 15:07:39 忙忘了,有事儿? 雪豹 15:07:49 嗯 雪豹 15:07:5 ...

  7. 分区表SQL调优/优化(Tuning)时容易“被欺骗”的场景之一

    近几天没有用户找到,除了看看书,就是上网浏览点东西,好不惬意.可惜好景不长,正在享受悠闲惬意的日子时,一个用户的工作人员QQ找到我,说他们在统计一些数据,但一个SQL特别慢,或者说就从来没出过数据,我 ...

  8. SQL调优(SQL TUNING)并行查询提示(Hints)之pq_distribute的使用

    pq_distribute提示通常被用于提升数据仓库中分区表间的连接操作性能. pq_distribute提示允许你确定参与连接的表数据行在生产和消费并行查询服务进程间如何分配. pq_distrib ...

  9. 常见的SQL调优(SQL Tuning)Tips

    建立适当的索引(参考<正确建立数据库索引的姿势>)   用UNION替换OR (适用于索引列)   用exist.not exist代替 in.not in   不要以字符格式声明数字(会 ...

随机推荐

  1. POJ 1862 Stripies 【优先队列】

    题意:科学家发现一种奇怪的东西,他们有重量weight,如果他们碰在一起,总重变成2*sqrt(m1*m2).要求出最终的重量的最小值. 思路:每次选取质量m最大的两个stripy进行碰撞结合,能够得 ...

  2. asp.net core 微信H5支付(扫码支付,H5支付,公众号支付,app支付)之2

    上一篇说到微信扫码支付,今天来分享下微信H5支付,适用场景为手机端非微信浏览器调用微信H5支付惊醒网站支付业务处理.申请开通微信H5支付工作不多做介绍,直接上代码. 首先是微信支付业务类(WxPayS ...

  3. Python 动态生成多个变量

    引用自:https://blog.csdn.net/u013061183/article/details/78015673 用Python循环创建多个变量, 如创建 a1=   .a2=   .a3= ...

  4. 016 Spark中关于购物篮的设计,以及优化(两个点)

    一:介绍 1.购物篮的定义 2.适用场景 3.相关概念 4.步骤 5.编程实现 6.步骤 二:程序 1.程序 package com.ibeifeng.senior.mba.association i ...

  5. QMessageBox的用法

    QMessageBox的用法   先来看一下最熟悉的QMessageBox::information.我们在以前的代码中这样使用过:   QMessageBox::information(NULL,  ...

  6. Java开发人员必须掌握的Linux命令(三)

    做一个积极的人 编码.改bug.提升自己 我有一个乐园,面向编程,春暖花开! 学习应该是快乐的,在这个乐园中我努力让自己能用简洁易懂(搞笑有趣)的表达来讲解知识或者技术,让学习之旅充满乐趣,这就是写博 ...

  7. error MSB3073 解决办法

    发现拷贝命令编译错误,查看输出列表发现时无法找到相应的路径. 1.顺着这个思路第一个想到的是中文路径的问题,先修改了盘符的中文名称,发现还是无法解决具体的问题. 2.后来反复查阅网上的资料,发现帮助并 ...

  8. C中const 定义常量的使用

    先看如下代码 #include <stdio.h> #include <string.h> #define ARRSIZE(a) (sizeof(a)/sizeof(a[0]) ...

  9. mysql安装后不是内部或外部命令解决

    在环境变量中配置mysql的bin 怎么找到bin目录,在管理工具,服务,常规选项卡下找到 双击mysql后,常规选项卡下的路径就是bin的路径,然后把该路径配置到环境变量中,即可,然后net sta ...

  10. C# try catch finally简单介绍和应用

    今天看代码书的时候,有用到try--catch--finally,然后就查了下具体的注意事项和应用. 简单来说就是: try { //有可能出错误的代码或者代码片段       } catch{ // ...