使用ORACLE SQL Tuning advisor快速优化低效的SQL语句

标签: oracle sql tuning | 发表时间:2013-09-15 02:58 | 作者:ljunjie82
出处:http://blog.csdn.net

ORACLE10G以后版本的SQL Tuning advisor可以从以下四个方面给出优化方案

  (1)为统计信息丢失或失效的对象收集统计信息
  (2)考虑优化器的任何数据偏差、复杂谓词或失效的统计信息
  (3)重新构建 SQL 以优化性能
  (4)提出新索引建议


下面来实际测试:


1、为SQL_id创建一个STA(SQL Tuning advisor) 分析任务(使用SYS用户执行)

SQL> variable task_li_testvarchar2(2000);

SQL>exec : task_li_test:=dbms_sqltune.create_tuning_task(sql_id=>'1z9atcd704psu',time_limit=>600,task_name=>'li_sql_1');

 

2、执行上面创建的STA(需要一定的时间)

SQL> execdbms_sqltune.execute_tuning_task(task_name=>'li_sql_1');

 

3、查询优化任务创建与执行的情况

selecta.owner,b.task_id,b.task_name,a.createdfrom dba_advisor_tasks a,dba_advisor_log bwhere a.task_id=b.task_idand a.task_name='li_sql_1'

owner

task_id

task_name

created

SYS

106698

    li_sql_1

2013-9-14 16:57

 

4、查看任务优化报告(优化的详细内容)

SQL>selectdbms_sqltune.report_tuning_task('li_sql_1')from dual

 

5、接受建议的 SQL 概要文件,即创建SQL_Profle

SQL> executedbms_sqltune.accept_sql_profile(task_name => 'li_sql_1',task_owner =>'SYS', replace => TRUE);

 

6、查看第5步创建起来的SQL_Profile信息

SQL>select a.name,a.task_id,a.createdfrom dba_sql_profiles a,dba_advisor_log bwhere a.task_id=b.task_idand b.task_name='li_sql_1'

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所起到的效果

  - SQL profile SYS_SQLPROF_01411bdf99410002used for this statement

 

8、删除SQL_Profile

SQL>execdbms_sqltune.drop_sql_profile(name =>'SYS_SQLPROF_01411bdf99410002');

 

9、删除优化任务

SQL> execdbms_sqltune.drop_tuning_task(task_name => 'li_sql_1');


  本文为“踩点”原创,转发请说明出处。谢谢!

作者:ljunjie82 发表于2013-9-14 18:58:37 原文链接
阅读:136 评论:0 查看评论

相关 [oracle sql tuning] 推荐:

使用ORACLE SQL Tuning advisor快速优化低效的SQL语句

- - CSDN博客数据库推荐文章
ORACLE10G以后版本的SQL Tuning advisor可以从以下四个方面给出优化方案.   (1)为统计信息丢失或失效的对象收集统计信息.   (2)考虑优化器的任何数据偏差、复杂谓词或失效的统计信息.   (3)重新构建 SQL 以优化性能.   (4)提出新索引建议. 1、为SQL_id创建一个STA(SQL Tuning advisor) 分析任务(使用SYS用户执行).

ORACLE SQL TUNING各种技巧及复杂实例

- - 数据库 - ITeye博客
ORACLE的优化器共有3种:. CHOOSE (选择性). 为了使用基于成本的优化器(CBO, Cost-Based Optimizer) , 你必须定期更新统计信息,以保证数据库中的对象统计信息(object statistics)的准确性. 如果数据库的优化器模式设置为选择性(CHOOSE),那么实际的优化器模式将和是否运行过analyze命令有关.

MySQL SQL Tuning:深入理解Order By

- - CSDN博客数据库推荐文章
在MySQL中ORDER BY按先后顺序有2种实现方式,先走索引无排序,如果不行,则用FILESORT. 走索引无排序需要满足2个条件:. ①排序字段和执行计划中所利用INDEX的索引键(或前面几个索引键)完全一致. ②表访问方式为index、ref或range [注释:explain输出中的Type可看出].

Oracle Tuning Log File Sync 等待事件的几种策略

- - CSDN博客数据库推荐文章
    在一个频繁 commit/rollback 或磁盘 I/O 有问题、大量物理读写争用.    那么、我们便会经常瞧见 LOG FILE SYNC 等待事件出现在 TOP EVENTS 中.    评估 LOG FILE SYNC等待事件的指标是平均等待时间、以及 AWR 后续的 WAIT EVENT HISTOGRAM.

oracle sql 优化大全

- - Oracle - 数据库 - ITeye博客
最近遇到了oracle sql优化的问题,找了一下,发现这文章实在不错,跟大家分享一下,如果以后有什么新的改进也会继续补充的. 1     前言… 2 . 2     总纲… 2 . 3     降龙十八掌… 3 . 第一掌 避免对列的操作… 3 . 第二掌 避免不必要的类型转换… 4 . 第三掌 增加查询的范围限制… 4 .

Oracle SQL性能优化

- - 数据库 - ITeye博客
(1)      选择最有效率的表名顺序(只在基于规则的优化器中有效):. ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先处理,在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表. 如果有3个以上的表连接查询, 那就需要选择交叉表(intersection table)作为基础表, 交叉表是指那个被其他表所引用的表.

ORACLE SQL Performance Analyzer的使用

- - CSDN博客数据库推荐文章
通过 SPA,您可以根据各种更改类型(如初始化参数更改、优化器统计刷新和数据库升级)播放特定的. SQL 或整个 SQL 负载,然后生成比较报告,帮助您评估它们的影响.. 在 Oracle Database 11g 之前的版本中,我必须捕获所有 SQL 语句,通过跟踪运行这些语句,. 然后得到执行计划 — 这是一项极其耗时又极易出错的任务.

查询Oracle 耗资源sql

- - 非技术 - ITeye博客
已有 0 人发表留言,猛击->> 这里<<-参与讨论. —软件人才免语言低担保 赴美带薪读研.

oracle各类型SQL的操作流程

- - 数据库 - ITeye博客
•Select * from test  where  object_id=200在体系中是如何运转的. 在PGA中把此条SQL语句hash成一个值;. 接下来根据此hash值到SGA的共享池中去匹配,如果没有,首先查询自己的语句语法是否正确,语义是否正确,是否有权限. 如果都通过则通过CBO解析生成执行计划(如走索引还是全表).