打赏

高级SQL优化(三)

SQL*PLUS下使用AUTOTRACE

1.AUTOTRACE简介  

  AUTOTRACE是SQL*Plus的一项功能,其作用是自动跟踪SQL语句,为SQL 语句生成一个 执行计划并且提供与 该语句的处理有关的统计信息

SQL*Plus AUTOTRACE 可以用来替代 SQL Trace 使用,AUTOTRACE 的好处是不必设置跟踪文件的格式,并且它将自动为 SQL 语句显示执行计划。AUTOTRACE与执行计划的区别是AUTOTRACE 分析和执行语句;而EXPLAIN PLAN仅分析语句,而不负责执行语句。

   AUTOTRACE在SQL*PLUS下执行,使用AUTOTRACE不会产生跟踪文件。

2.配置AUTOTRACE

  (1).确保表PLAN_TABLE已经创建,如果没有则如下创建:

 

  (2).确保角色plustrace已经创建,如果没有则如下创建:

 

 

3.使用AUTOTRACE

 

 

4. AUTOTRACE设置命令

参见每个设置的现场举例

 

5. AUTOTRACE STATISTICS含义

使用SQL调优顾问

删除掉bigtab和smalltab上的所有索引:

 

 

 

既然上述语句性能很差,那么怎么优化呢?幸运的是Oracle提供一个工具称为SQL调优顾问。从 Oracle 10g起,可以使用SQL调优顾问 (SQL Tuning Advisor ,STA)来获得一个性能很差的语句的优化结果。STA的特点是简单、智能,DBA只需要调用函数就可以给出一个性能很差的语句的优化结果,从而做到有的 放矢!

使用DBMS_SQLTUNE包来创建优化任务并阅读优化建议:

 

创建完成后验证是否完成:

 

 

创建完成后验证是否完成:

 

单击该条目查看优化结果

 

也可以通过SQL语句来查看结果,此方法是我们最喜欢的方法:

  

进行优化:

 

优化后在使用autotrace:

 

优化后在使用autotrace:

 

结论:

使用STA能快速定位性能瓶颈,从而为性能优化提供了准确的依据!

 

实时SQL监视

   实时SQL监视(real-time SQL Monitorning)是Oracle 11g的另外一个新功能,其作用是允许用户监视正在执行的SQL。默认情况下,当使用并行查询、或者当SQL执行的CPU或I/O超过5秒钟时会自动启动。

也可以使用优化提示强制使用实时SQL监视功能,如下:

 select /*+ monitor */  count(*)

  from bigtab a, smalltab b

   where  a.object_name=b.table_name

  如果要强制不使用实时SQL监视功能,则也可以使用优化提示:

select /*+ no_monitor */  count(*)

  from bigtab a, smalltab b

   where  a.object_name=b.table_name

 

   与实时SQL监视相关的系统视图包括:

uV$SQL_MONITOR

uV$SQL_PLAN_MONITOR

uV$ACTIVE_SESSION_HISTORY

uV$SESSION

uV$SESSION_LONGOPS

uV$SQL

uV$SQL_PLAN

对于刚刚监视的结果,可以使用DBMS包读取:

select dbms_sqltune.report_sql_monitor from dual;

 

1.实时SQL监视示例1-执行超过5秒的SQL

 

 

 在OEM中查看监视结果,选择“性能”->“其它监视链接”->“SQL Monitoring”:

 

 

 

 查看具体的监视报告(图形化):

 

单击“文本报告”,则:

 

使用DBMS包查看监视结果:

 

2.实时SQL监视示例2-使用优化提示强制监视

 

  

结论:

1.实时SQL监视通过OEM查看其监视报告时,具有更好的图形化的展示效果,因此更加直观

2.如果监视的SQL语句发现具有全表扫描等执行计划的特征,或者CPU时间和I/O时间比较长,则可以与SQL调优顾问接合起来,不但能获知性能瓶颈,而且能获得Oracle推荐的优化策略。

3.实践中,程序员往往不加思考的按照自己的理解和经验编写SQL,此举在90%的项目中存在,从而造成项目产品投用后很快就产生各种性能瓶颈,正确的做法应该是 在准备好足够的测试数据,并且监视每一条SQL并在开发的初始阶段即 优化之

 

转自私塾在线。

posted @ 2013-03-05 16:41  lingjiango  阅读(274)  评论(0)    收藏  举报