将测试进行到底!

oracle中关于autotrace工具的使用(有示例)

上一篇 / 下一篇  2010-12-10 10:59:06 / 个人分类:ORACLE

SQLPLUS的AutoTrace是分析SQL的执行计划,执行效率的一个非常简单方便的工具,在绝大多数情况下,也是非常有用的工具。利用AutoTrace工具提供的SQL执行计划和执行状态可以为我们优化SQL的时候提供优化的依据,以及优化效果的明显的对比效果。 AutoTrace只能在只有oracle的工具才有,比如sql developer和sql plus,PL/SQL的执行计划不准确。

AutoTrace与其他小工具的区别:

SQL*Plus AUTOTRACE 可以用来替代 SQL Trace 使用,AUTOTRACE的好处是您不必设置跟踪文件的格式,并且它将自动为 SQL 语句显示执行计划。然而,AUTOTRACE 分析和执行语句,而EXPLAIN PLAN仅分析语句。 使用AUTOTRACE不会产生跟踪文件。sql trace会在后台udump目录中残生一个trc文件,并且是二进制的,还得使用tkprof进行编译才能看到统计。

用法:

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

举例:
SET AUTOT[RACE] OFF 停止AutoTrace
SET AUTOT[RACE] ON 开启AutoTrace,显示AUTOTRACE信息和SQL执行结果
SET AUTOT[RACE] TRACEONLY 开启AutoTrace,仅显示AUTOTRACE信息
SET AUTOT[RACE] ON EXPLAIN 开启AutoTrace,仅显示AUTOTRACE的EXPLAIN信息
SET AUTOT[RACE] ON STATISTICS开启AutoTrace,仅显示AUTOTRACE的STATISTICS信息

结果解释
physical reads 物理读——执行SQL的过程中,从硬盘上读取的数据块个数
redo size      重做数——执行SQL的过程中,产生的重做日志的大小
bytes set via sql*net to client  通过sql*net发送给客户端的字节数
bytes received via sql*net from client  通过sql*net接受客户端的字节数
sorts(memory)  在内存中发生的排序
sorts(disk)    不能在内存中发生的排序,需要硬盘来协助
rows processed 结果的记录数

总结:

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,但是不显示查询输出

SQL>set autotrace on; //查看sql执行计划
SQL> select username,user_id from test where username='ORACLE';

USERNAME                          USER_ID
------------------------------ ----------
ORACLE                                 55


Execution Plan
----------------------------------------------------------
Plan hash value: 1357081020

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

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

   1 - filter("USERNAME"='ORACLE')


Statistics
----------------------------------------------------------
        325  recursive calls
          0  db block gets
         73  consistent gets
          1  physical reads
          0  redo size
        475  bytes sent via SQL*Net to client
        385  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          4  sorts (memory)
          0  sorts (disk)
          1  rows processed

SQL> select username,user_id from test where rownum<5;

USERNAME                          USER_ID
------------------------------ ----------
MGMT_VIEW                              53
SYS                                     0
SYSTEM                                  5
DBSNMP                                 24


Execution Plan
----------------------------------------------------------
Plan hash value: 3931117773

---------------------------------------------------------------------------
| Id  | Operation          | Name | Rows  | Bytes | Cost (%CPU)| Time     |
---------------------------------------------------------------------------
|   0 | SELECT STATEMENT   |      |     4 |    44 |     2   (0)| 00:00:01 |
|*  1 |  COUNT STOPKEY     |      |       |       |            |          |
|   2 |   TABLE ACCESS FULL| TEST |     4 |    44 |     2   (0)| 00:00:01 |
---------------------------------------------------------------------------

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

   1 - filter(ROWNUM<5)


Statistics
----------------------------------------------------------
         86  recursive calls
          0  db block gets
         16  consistent gets
          0  physical reads
          0  redo size
        550  bytes sent via SQL*Net to client
        385  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          4  rows processed

SQL> set timeing on 
SP2-0158: unknown SET option "timeing"
SQL>set timing on;   //打开计时器
SQL> select username from test;

USERNAME
------------------------------
MGMT_VIEW
SYS
SYSTEM
DBSNMP
SYSMAN
ORACLE
OUTLN
MDSYS
ORDSYS
CTXSYS
ANONYMOUS

USERNAME
------------------------------
EXFSYS
DMSYS
WMSYS
XDB
ORDPLUGINS
SI_INFORMTN_SCHEMA
OLAPSYS
MDDATA
DIP
SCOTT
TSMSYS

22 rows selected.

Elapsed: 00:00:00.08

Execution Plan
----------------------------------------------------------
Plan hash value: 1357081020

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


Statistics
----------------------------------------------------------
        333  recursive calls
          0  db block gets
         75  consistent gets
          1  physical reads
          0  redo size
        813  bytes sent via SQL*Net to client
        396  bytes received via SQL*Net from client
          3  SQL*Net roundtrips to/from client
          4  sorts (memory)
          0  sorts (disk)
         22  rows processed

SQL> select count(*) from test;

  COUNT(*)
----------
        22

Elapsed: 00:00:00.01

Execution Plan
----------------------------------------------------------
Plan hash value: 1950795681

-------------------------------------------------------------------
| Id  | Operation          | Name | Rows  | Cost (%CPU)| Time     |
-------------------------------------------------------------------
|   0 | SELECT STATEMENT   |      |     1 |     3   (0)| 00:00:01 |
|   1 |  SORT AGGREGATE    |      |     1 |            |          |
|   2 |   TABLE ACCESS FULL| TEST |    22 |     3   (0)| 00:00:01 |
-------------------------------------------------------------------


Statistics
----------------------------------------------------------
          1  recursive calls
          0  db block gets
          3  consistent gets
          0  physical reads
          0  redo size
        411  bytes sent via SQL*Net to client
        385  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          1  rows processed

SQL>


TAG:

 

评分:0

我来说两句

Open Toolbar