`

set autotrace on

阅读更多
在SQL*Plus中,你可以通过设置autotrace选项来在执行SQL命令的同时,自动的获得语句的执行计划和附加的统计信息。AUTOTRACE是一个很出色的Oracle SQL语句的诊断工具,与Explain plan不同的是这条SQL是实际执行了的,同时AUTOTRACE使用起来也极为方便。


一、启用Autotrace功能。
任何以SQL*PLUS连接的session都可以用Autotrace,不过还是要做一些设置的,否则可能报错。

1、报错示例:
SQL :> set autotrace on;
SP2-0613: Unable to verify PLAN_TABLE format or existence
SP2-0611: Error enabling EXPLAIN report
SP2-0618: Cannot find the Session Identifier. Check PLUSTRACE role is enabled
SP2-0611: Error enabling STATISTICS report

2、解决方法:

a.以SYS用户运行plustrce.sql脚本

cd $ORACLE_HOME/sqlplus/admin

oracle>sqlplus \'/ as sysdba\';
SQL>@plustrce.sql

b.给任何想使用Autotrace的用户授PLUSTRACE权限。

SQL>grant plustrace to hr;

c.同时被授权的用户比如hr用户的PLAN_TABLE这个表必须存在。如果不存在这样:

cd $ORACLE_HOME/sqlplus/admin

oracle>sqlplus hr/hr; --hr为示例用户
SQL>@utlxplan.sql 

二、设置Autotrace的命令。

序号 命令 解释 
1 SET AUTOTRACE OFF 此为默认值,即关闭Autotrace 
2 SET AUTOTRACE ON EXPLAIN 只显示执行计划 
3 SET AUTOTRACE ON STATISTICS   只显示执行的统计信息 
4 SET AUTOTRACE ON 包含2,3两项内容 
5 SET AUTOTRACE TRACEONLY   与ON相似,但不显示语句的执行结果。 

三、Autotrace执行计划的各列的涵义

序号 列名   解释 
1 ID_PLUS_EXP 每一步骤的行号 
2 PARENT_ID_PLUS_EXP 每一步的Parent的级别号 
3 PLAN_PLUS_EXP 实际的每步 
4 OBJECT_NODE_PLUS_EXP   Dblink或并行查询时才会用到 

四、AUTOTRACE Statistics常用列解释

序号 统计列 解释 
1 db block gets 从buffer cache中读取的block的数量 
2 consistent gets 从buffer cache中读取的undo数据的block的数量 
3 physical reads 从磁盘读取的block的数量 
4 redo size DML生成的redo的大小 
5 sorts (memory) 在内存执行的排序量 
7 sorts (disk) 在磁盘上执行的排序量 

五、示例

oracle@yang:~> sqlplus hr/hr

SQL*Plus: Release 9.2.0.4.0 - Production on Wed Apr 12 15:46:56 2006

Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.

Connected to:
Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production
With the Partitioning, Oracle Label Security, OLAP and Oracle Data Mining options
JServer Release 9.2.0.4.0 - Production

SQL>set autotrace on;

SQL> select b.DEPARTMENT_NAME,sum(a.SALARY)
2 from employees a,departments b
3 where a.DEPARTMENT_ID=b.DEPARTMENT_ID
4 group by b.DEPARTMENT_NAME
5 /

DEPARTMENT_NAME SUM(A.SALARY)
------------------------------ -------------
Accounting 20300
Administration 4400
Executive 58000
Finance 51600
Human Resources 6500
IT 28800
Marketing 19000
Public Relations 10000
Purchasing 24900
Sales 304500
Shipping 156400

11 rows selected.

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

SQL> set autotrace on
SQL> /

DEPARTMENT_NAME SUM(A.SALARY)
------------------------------ -------------
Accounting 20300
Administration 4400
Executive 58000
Finance 51600
Human Resources 6500
IT 28800
Marketing 19000
Public Relations 10000
Purchasing 24900
Sales 304500
Shipping 156400

11 rows selected.

Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=25 Card=27 Bytes=621
)

1 0 SORT (GROUP BY) (Cost=25 Card=27 Bytes=621)
2 1 HASH JOIN (Cost=21 Card=106 Bytes=2438)
3 2 TABLE ACCESS (FULL) OF \'DEPARTMENTS\' (Cost=10 Card=27
Bytes=432)

4 2 TABLE ACCESS (FULL) OF \'EMPLOYEES\' (Cost=10 Card=107 B
ytes=749)



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

SQL> edit
Wrote file afiedt.buf

1 select b.DEPARTMENT_NAME,sum(a.SALARY)
2 from employees a,departments b
3 where a.DEPARTMENT_ID=b.DEPARTMENT_ID
4* group by b.DEPARTMENT_NAME
SQL> /

DEPARTMENT_NAME SUM(A.SALARY)
------------------------------ -------------
Accounting 20300
Administration 4400
Executive 58000
Finance 51600
Human Resources 6500
IT 28800
Marketing 19000
Public Relations 10000
Purchasing 24900
Sales 304500
Shipping 156400

11 rows selected.

Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=25 Card=27 Bytes=621
)

1 0 SORT (GROUP BY) (Cost=25 Card=27 Bytes=621)
2 1 HASH JOIN (Cost=21 Card=106 Bytes=2438)
3 2 TABLE ACCESS (FULL) OF \'DEPARTMENTS\' (Cost=10 Card=27
Bytes=432)

4 2 TABLE ACCESS (FULL) OF \'EMPLOYEES\' (Cost=10 Card=107 B
ytes=749)



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

SQL>
分享到:
评论

相关推荐

    Oracle性能分析——使用set_autotrace_on和set_timing_on来分析select语句的性能.doc

    Oracle 性能分析——使用 set_autotrace_on 和 set_timing_on 来分析 select 语句的性能 Oracle 数据库性能分析是数据库优化的重要步骤之一,通过对 SQL 语句的执行计划和运行时间的分析,可以了解数据库的性能瓶颈...

    oracle 的Autotrace介绍

    在使用 Autotrace 时,需要设置相关的命令,包括 SET AUTOTRACE OFF、SET AUTOTRACE ON、SET AUTOTRACE ON EXPLAIN、SET AUTOTRACE TRACEONLY 和 SET AUTOTRACE TRACEONLY STATISTICS 等。其中,SET AUTOTRACE ON 是...

    SQL性能优化技巧分享 SQL性能优化技巧.docx

    * SET AUTOTRACE ON:执行SQL语句,且显示执行计划和统计信息,无执行结果 * SET AUTOTRACE TRACEONLY:仅显示执行计划和统计信息,无执行结果 * SET AUTOTRACE OFF:关闭跟踪显示计划与统计信息 例如,要执行SQL语句...

    oracle使用autotrace 功能

    只需在执行SQL语句之前输入`set autotrace on`命令。这将自动追踪接下来执行的SQL语句,展示执行计划和性能统计信息。 5. **解决权限问题** 如果遇到“ORA-01039: 视图基本对象的权限不足”的错误,可能是因为用户...

    Oracle执行计划介绍与测试.pdf

    - `SET AUTOTRACE ON EXPLAIN`:仅显示执行计划。 - `SET AUTOTRACE ON STATISTICS`:仅显示执行统计信息。 - `SET AUTOTRACE ON`:同时显示执行计划和执行统计信息。 - `SET AUTOTRACE TRACE ONLY`:仅显示执行...

    oracle怎么查看执行计划

    SQL> set autotrace on statistics only ``` 关闭AUTOTRACE功能则可以使用: ```sql SQL> set autotrace off ``` #### 示例 假设我们需要分析以下SQL语句的执行计划: ```sql SELECT d.dname, e.ename, e.sal ...

    获取SQL语句的执行计划v1

    - `set autotrace on statistics`:仅显示查询结果和统计数据,不包括执行计划。 ```sql select * from emp; ``` - `set autotrace on explain`:仅显示查询结果和执行计划,不包括统计数据。 ```sql select ...

    oracle 数据库性能调优技术 3 中文

    通过以上示例,可以看到在使用SET AUTOTRACE ON命令时,执行计划是在实际执行查询后显示的,而使用EXPLAIN PLAN FOR命令则不需要实际执行查询即可查看执行计划。 #### 五、总结 本文深入探讨了嵌套循环连接的概念...

    oracle 执行计划

    - **SET AUTOTRACE ON STATISTICS**: 只显示执行的统计信息。 - **SET AUTOTRACE ON**: 同时显示执行计划和统计信息。 - **SET AUTOTRACE TRACE ONLY**: 类似于ON,但是不显示语句的执行结果。 示例命令如下: ...

    oracle执行计划

    - `SET AUTOTRACE ON STATISTICS`: 显示执行统计信息。 - `SET AUTOTRACE ON`: 同时显示执行计划和执行统计信息。 - `SET AUTOTRACE TRACE ONLY`: 仅显示执行计划和统计信息,不显示执行结果。 - `SET AUTOTRACE...

    Oracle培训讲义(性能分析与调整).docx

    - `set autotrace traceonly`: 类似于`set autotrace on`,但不显示查询结果。 - `set autotrace traceonly explain`: 只显示执行计划。 - `set autotrace traceonly statistics`: 只显示统计信息。 #### 二、解读...

    ORACLE数据库查看执行计划

    - `SET AUTOTRACE ON EXPLAIN` 显示执行计划,不显示执行时间和统计信息。 - `SET AUTOTRACE ON` 显示执行计划、执行时间和统计信息。 - `SET AUTOTRACE TRACEONLY` 显示执行计划和统计信息,不输出查询结果。 -...

    oracle explain plan总结

    SET AUTOTRACE ON STATISTICS ``` #### 三、结论 通过上述两种方法,我们可以轻松地获取Oracle SQL语句的执行计划。这些信息对于诊断性能问题、优化查询至关重要。无论是使用`EXPLAIN PLAN`还是`AUTOTRACE`,都...

    oracle获取执行计划全部方法

    #### 方法二:Set Autotrace On 方式 - **应用场景**:适用于跟踪特定 SQL 的执行情况。 - **步骤**: 1. 设置 `SET AUTOTRACE ON`。 2. 执行 SQL,系统将自动输出执行计划及相关统计信息。 - **其他选项**: - ...

    Oracle默认用户名与密码速查表.doc

    例如,可以使用 SET AUTOTRACE ON 命令启用 AutoTrace,然后就可以看到 SQL 语句的执行计划和执行成本信息。此外,还可以使用 SET Timing On 或者 Set Time On 命令,获取更多的执行信息。在 Toad 中,可以按下 Ctrl...

    Oracle查看SQL执行计划SQL性能分析.docx

    - `set autotrace on statistics`: 显示执行的统计信息。 - `set autotrace on`: 同时显示执行计划和统计信息。 - `set autotracetraceonly`: 类似于`on`模式,但不显示语句的执行结果。 **示例代码**: ```sql set...

    ORACLEEXPLAINPLAN的总结[文].pdf

    此外,`AUTOTRACE`还可以与其他命令结合使用,例如`SET TIMING ON`来显示SQL语句的执行时间,或者`SET AUTOTRACE ON EXPLAIN`来仅显示执行计划而不会执行语句。 总的来说,`EXPLAIN PLAN`和`AUTOTRACE`是Oracle...

Global site tag (gtag.js) - Google Analytics