现在的位置: 首页 > 综合 > 正文

AutoTrace

2013年08月01日 ⁄ 综合 ⁄ 共 3937字 ⁄ 字号 评论关闭

一、   AUTOTRACE是一个SQL*Plus工具,用于跟踪SQL的执行计划,收集执行时所耗用资源的统计信息,是SQL优化工具之一,AutoTRACE自动跟踪为
SQL 语句生成一个执行计划并且提供与该语句的处理有关的统计。SQL*Plus AUTOTRACE 可以用来替代 SQL Trace使用,AUTOTRACE 的好处是您不必设置跟踪文件的格式,并且它将自动为 SQL 语句显示执行计划。然而,AUTOTRACE 分析和执行语句;而EXPLAIN PLAN仅分析语句。使用AUTOTRACE不会产生跟踪文件。SQLPLUS的AutoTrace是分析SQL的执行计划,执行效率的一个非常简单方便的工具,在绝大多数情况下,也是非常有用的工具。利用 AutoTrace工具提供的SQL执行计划和执行状态可以为我们优化SQL的时候提供优化的依据,以及优化效果的明显的对比效果。

二、AutoTrace进行优化的注意事项

1.可以通过设置timing来得到执行SQL所用的时间,但不能仅把这个时间来当作SQL执行效率的唯一量度。这个时间会包括进行AUTOTRACE的一些 时间消耗,所以这个时间并不仅仅是SQL执行的时间。这个时间会与SQL执行时间有一定的误差,而在SQL比较简单的时候尤为明显。

2. 判断SQL效率高低应该通过执行SQL执行状态里面的逻辑读的数量
     逻辑读 =(dbblock gets+ consistent gets)
总结

AutoTrace是ORACLE中优化工具中最基本的工具,虽然功能比较有限,但足以满足我们日常工作的需要。

  在Oracle9i中需要运行$ORACLE_HOME\RDBMS\ADMIN\utlxplan.sql脚本生成plan_table表;
  在Oracle10g中PLAN_TABLE不再需要创建,Oracle缺省增加了一个字典表PLAN_TABLE$,然后基于PLAN_TABLE$创建公用同义词供用户使用

关于Autotrace几个常用选项的说明:
SET AUTOTRACE OFF ---------------- 不生成AUTOTRACE 报告,这是缺省模式
SET AUTOTRACE ON EXPLAIN ------ AUTOTRACE只显示优化器执行路径报告
SET AUTOTRACE ON STATISTICS -- 只显示执行统计信息
SET AUTOTRACE ON ----------------- 包含执行计划和统计信息
SET AUTOTRACE TRACEONLY ------ 同set autotrace on,但是不显示查询输出

三、启用 AUTOTRACE 功能

下面给出启用AUTOTRACE
功能步骤。

1、创建基础表

    运行$ORACLE_HOME/rdbms/admin/utlxplan脚本来创建plan_table  

 -使用system帐户登陆-执行utlxplan脚本

   为表plan_table创建公共同义词

 SQL>createpublicsynonym plan_table for plan_table;  

 

    Synonym created.

 
将同义词表plan_table授予给所有用户

   
SQL>grant all on plan_table to public;     

 

    Grant succeeded.

 

2、创建角色

    运行$ORACLE_HOME/sqlplus/admin/plustrce.sql脚本

  使用sysdba帐户登陆.-执行创建角色的脚本  

SQL> @$ORACLE_HOME/sqlplus/admin/plustrce.sql
SQL>
SQL> drop role plustrace;

Role dropped.

SQL> create role plustrace;

Role created.

SQL>
SQL> grant select on v_$sesstat to plustrace;

Grant succeeded.

SQL> grant select on v_$statname to plustrace;

Grant succeeded.

SQL> grant select on v_$mystat to plustrace;

Grant succeeded.

SQL> grant plustrace to dba with admin option;

Grant succeeded.

SQL>
SQL> set echo off

       

3、角色的授予

    在创建角色后,DBA首先被授予了该角色,且可以将角色授予其它组和用户。可以手工把plustrace授予给public,

    则该数据库内所有的用户都将拥有plustrace角色的权限。也可以单独授予给某个组和用户

        
授予给所有用户

     SQL> show user
USER is "SYS"
SQL> grant plustrace to public;

Grant succeeded.

        授予给单独用户

    SQL>  grant plustrace to scott;

Grant succeeded.;

    

    完成上述设置之后即可使用autotrace
功能

4、AUTOTRACE的几个选项

        在sql提示符下输入set autot后将会给出设置autotrace的提示,如下

       

        scott@ORCL>set autot

        Usage:SET AUTOT[RACE]
{OFF|ON| TRACE[ONLY]}
[EXP[LAIN]] [STAT[ISTICS]]


        set autotraceoff :缺省值,将不生成autotrace
报告

        set autotrace on:包含执行计划和统计信息

        set autotracetraceonly :等同于setautotrace on,但不显示查询输出的结果

        set autotrace onexplain :只显示优化器执行路径报告

        set autotrace onstatistics :只显示执行统计信息

       

       SQL> set autotrace on; 

       

SQL> select * from emp  where ename='SCOTT';

     EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM
---------- ---------- --------- ---------- --------- ---------- ----------
    DEPTNO
----------
      7788 SCOTT      ANALYST         7566 19-APR-87       3000
        20

Execution Plan
----------------------------------------------------------
Plan hash value: 3956160932

--------------------------------------------------------------------------
| Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |      |     1 |    87 |     3   (0)| 00:00:01 |
|*  1 |  TABLE ACCESS FULL| EMP  |     1 |    87 |     3   (0)| 00:00:01 |
--------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - filter("ENAME"='SCOTT')

Note
-----
   - dynamic sampling used for this statement

Statistics
----------------------------------------------------------
        451  recursive calls
          0  db block gets
         90  consistent gets
          7  physical reads 物理读——执行SQL的过程中,从硬盘上读取的数据块个数
          0  redo size重做数——执行SQL的过程中,产生的重做日志的大小

        824  bytes sent via SQL*Net to client
        385  bytes received via SQL*Net from clientt 通过sql*net发送给客户端的字节数
          2  SQL*Net roundtrips to/from client通过sql*net接受客户端的字节数
          6  sorts (memory)在内存中发生的排序
          0  sorts (disk)不能在内存中发生的排序,需要硬盘来协助
          1  rows processed
结果的记录数

抱歉!评论已关闭.