ITPub博客

首页 > 数据库 > Oracle > Oracle优化工具——AutoTrace

Oracle优化工具——AutoTrace

原创 Oracle 作者:sunwgneuqsoft 时间:2007-12-01 09:37:02 0 删除 编辑
SQLPLUSAutoTrace是分析SQL的执行计划,执行效率的一个非常简单方便的工具,在绝大多数情况下,也是非常有用的工具。利用AutoTrace工具提供的SQL执行计划和执行状态可以为我们优化SQL的时候提供优化的依据,以及优化效果的明显的对比效果。[@more@]

一. AutoTrace的设置

SQL> connect / as sysdba

SQL> @?/rdbms/admin/utlxplan.sql

Table created.

SQL> create public synonym plan_table for plan_table;

Synonym created.

SQL> grant select,update,insert,delete on plan_table to public;

Grant succeeded.

SQL> @?/sqlplus/admin/plustrce.sql

SQL>grant plustrace to public.

二. AutoTrace的使用

SQLPLUS中输入相关AUTOTRACE命令,输入想要优化的SQL语句,即可得到SQL的执行计划和执行状态信息。

SQL> conn ny_lx/test

已连接。

SQL> set timing on //开启时间显示

SQL> set autot traceonly //仅显示trace结果,不显示SQL执行结果

SQL> select * from ac01 where aac001='9990000111';

已用时间: 00: 00: 00.62

Execution Plan

----------------------------------------------------------

0 SELECT STATEMENT Optimizer=CHOOSE

1 0 TABLE ACCESS (BY INDEX ROWID) OF 'AC01'

2 1 INDEX (UNIQUE SCAN) OF 'PK_AC01' (UNIQUE)

Statistics

----------------------------------------------------------

0 recursive calls

0 db block gets

3 consistent gets

2 physical reads

0 redo size

1875 bytes sent via SQL*Net to client

424 bytes received via SQL*Net from client

2 SQL*Net roundtrips to/from client

0 sorts (memory)

0 sorts (disk)

1 rows processed

用法: 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,仅显示AUTOTRACEEXPLAIN信息

SET AUTOT[RACE] ON STATISTICS开启AutoTrace,仅显示AUTOTRACESTATISTICS信息

三. 执行计划的分析

Execution Plan

----------------------------------------------------------

0 SELECT STATEMENT Optimizer=CHOOSE

1 0 TABLE ACCESS (BY INDEX ROWID) OF 'AC01'

2 1 INDEX (UNIQUE SCAN) OF 'PK_AC01' (UNIQUE)

----------------------------------------------------------

这个就是SQL select * from ac01 where aac001='9990000111';执行计划。

执行的过程为:

1) INDEX (UNIQUE SCAN) OF 'PK_AC01' (UNIQUE)

2) TABLE ACCESS (BY INDEX ROWID) OF 'AC01'

执行计划是一个树状结构,计划的执行是从叶结点开始,直到根结点。所以不同的层上,越底层的越先被执行(第一列数字中较大的);不同层上,越左边的越先被执行(第二列数字中较小的)。

通过分析这个实行计划可以知道以下几点:

a) 这是一条SELECT语句

b) 数据库系统现在使用的优化器模式为CHOOSE

c) 执行的时候先通过AC01表上的唯一索引PK_AC01查找到相应记录的ROWID,然后通过索引的ROWID直接访问AC01表,找到相应的记录。

这是一条比较简单的SQL,所以执行计划也相对来说比较简单,没有涉及到过多的连接和索引等。

四. 执行状态的分析

Statistics

----------------------------------------------------------

0 recursive calls

0 db block gets

3 consistent gets

2 physical reads

0 redo size

1875 bytes sent via SQL*Net to client

424 bytes received via SQL*Net from client

2 SQL*Net roundtrips to/from client

0 sorts (memory)

0 sorts (disk)

1 rows processed

这些数据就是这条SQL语句的执行状态。下面分别说一下各个数据项的含义:

1recursive calls

递归调用——执行SQL的时候的产生的递归调用的数量,这个参数和访问数据字典的次数有很大的关系。一般来说,这个参数值不会很大。

2db block gets

DB块取——在发生INSERTDELETEUPDATESELECT FOR UPDATE的时候,数据库缓冲区中的数据库块的个数。在SELECT语句中一般为0

3consistent gets

一致性读——除了SELECT FOR UPDATE的时候,从数据库缓冲区中读取的数据块的个数

4physical reads

物理读——执行SQL的过程中,从硬盘上读取的数据快个数

5redo size

重做数——执行SQL的过程中,产生的重做日志的大小

6bytes set via sql*net to client

通过sql*net发送给客户端的字节数

7bytes received via sql*net from client

通过sql*net接受客户端的字节数

8sql*net roundtrips to/from client

9sorts(memory)

在内存中发生的排序

10sorts(disk)

不能在内存中发生的排序,需要硬盘来协助

11rows processed

结果的记录数

五. AutoTrace进行优化的注意事项

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

2. 判断SQL效率高低应该通过执行SQL执行状态里面的逻辑读的数量

逻辑读 =db block gets+ consistent gets

六. 总结

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

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/8394333/viewspace-987145/,如需转载,请注明出处,否则将追究法律责任。

上一篇: ORACLE优化器
请登录后发表评论 登录
全部评论
  • 博文量
    56
  • 访问量
    758725