Home >Database >Mysql Tutorial >Oracle 配置Auto Trace监控sql执行计划

Oracle 配置Auto Trace监控sql执行计划

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOriginal
2016-06-07 17:03:40930browse

获取执行计划和执行成本,写出最优的sql语句,是每个Oracle开发人员和dba必须具备的能力之一。Oracle 11g以后已经默认为dba role

获取执行计划和执行成本,写出最优的sql语句,是每个Oracle开发人员和dba必须具备的能力之一。

Oracle 11g以后已经默认为dba role自动打开autotrace?

配置autotrace:

进入到$ORACLE_HOME/rdbms/admin下面

进入到sqlplus中,

执行:

SQL> @utlxplan

创建分析表,为了方便操作,我们可以创建一个同义词

SQL> create public synonym plan_table for plan_table;

我们可以把这个表的权限赋给我们想要给的用户,也可以给public这样任何一个人就可以使用sql*plus进程跟踪啦。这样就不需要每个用户都按照自己的计划表啦。

SQL> grant all on plan to public;

创建plustrace的角色

进入到%ORACLE_HOME%/sqlplus/admin(linux,unix是$ORACLE_HOME/sqlplus/admin)

执行

SQL> @plustrce.sql

我们也可以把他的权限赋予给public

SQL> grant plustrace to public;

关于autotrace的操作:

安装成功后,会自动得到一个autotrace的报告,我们可以使用一个参数显示执行的时间:

SQL> set timing on

autotrace默认是关闭的,一下是他的详细启动:

SET AUTOTRACE OFF:不生成AUTOTRACE 报告,这是默认设置。
SET AUTOTRACE ON EXPLAIN:AUTOTRACE 报告只显示优化器执行路径。
SET AUTOTRACE ON STATISTICS:AUTOTRACE 报告只显示SQL 语句的执行统计信息。
SET AUTOTRACE ON:AUTOTRACE 报告既包括优化器执行路径,又包括SQL 语句的执行统计信息。
SET AUTOTRACE TRACEONLY:这与SET AUTOTRACE ON 类似,但是不显示用户的查询输出。

这是开启autotrace后的一个执行计划

SQL> insert into t values (2,'2');

已创建 1 行。

已用时间:  00: 00: 00.00

执行计划
----------------------------------------------------------

-------------------------------------------------------------------------
| Id  | Operation        | Name | Rows  | Bytes | Cost (%CPU)| Time     |
-------------------------------------------------------------------------
|   0 | INSERT STATEMENT |      |     1 |   100 |     1   (0)| 00:00:01 |
-------------------------------------------------------------------------

统计信息
----------------------------------------------------------
          1  recursive calls
          1  db block gets
          1  consistent gets
          0  physical reads
        308  redo size
        669  bytes sent via SQL*Net to client
        564  bytes received via SQL*Net from client
          4  SQL*Net roundtrips to/from client
          1  sorts (memory)
          0  sorts (disk)
          1  rows processed

以下是对执行计划中的统计信息的解析:

项目

含义

备注

recursive calls

递归调用SQL的个数;Oracle在执行这个SQL的时候,有时候会生成很多额外的SQL语句,这个就成为递归调用;

 

db block gets

逻辑读,从数据buffer cache中读取;进行current模式读取;

 

consistent gets

逻辑读,进行一致读模式读取;

 

physical reads

物理读成本;

 

redo size

产生重做日志大小

 

bytes sent via SQL*Net to client

利用sql*net传入到client的字节数;

 

bytes received via SQL*Net from client

利用sql*net传出client的字节数;

 

SQL*Net roundtrips to/from client

 

 

sorts (memory)

内存中排序空间使用;

 

sorts (disk)

物理存储中排序空间使用;

如果memory空间使用不足,是会使用disk的空间的;

rows processed

 

Autorace工具是我们经常使用的性能评测工具,能够帮助解决很多问题。

linux

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn