收藏本站

人工智能培训机构,上海涛德,算法工程师,数据科学家高端培训机构-上海涛德

Oracle性能调优:用Sqlplus AUTOTRACE 获得执行计划信息

2013-4-20 21:07| 查看: 1861| 评论: 0

摘要: 使用 SQL*Plus 运行 SQL 语句时,可以自动获得有关执行计划和语句执行统计信息的报表。会在成功执行 SQL DML(即 SELECT、DELETE、UPDATE 和 INSERT)语句后生成此报表。此报表对于监视和优化这些语句的性能十分有用 ...

使用 SQL*Plus 运行 SQL 语句时,可以自动获得有关执行计划和语句执行统计信息的报表。会在成功执行 SQL DML(SELECT、DELETE、UPDATE INSERT语句后生成此报表。此报表对于监视和优化这些语句的性能十分有用。 

要使用此功能,您的方案中必须有 PLAN_TABLE且您必须拥有 PLUSTRACE 角色。要授予 PLUSTRACE 角色,需要拥有数据库管理员 (DBA) 权限。通过运行提供的 $ORACLE_HOME/sqlplus/admin/plustrce.sql 脚本会创建 PLUSTRACE 角色并将其授予 DBA 角色。

在某些版本和平台上,此操作是通过运行数据库创建脚本来完成的。如果您的平台不属于这种情况,请以 SYSDBA 的身份连接,并运行 plustrce.sql 脚本。

PLUSTRACE 角色包含在三个 V$ 视图上执行 SELECT 操作的权限。对于生成 AUTOTRACE 统计信息,这些权限是必需的。

AUTOTRACE 是用来优化 SQL 语句的最佳诊断工具。它完全是说明性的,比 EXPLAIN PLAN 更容易使用。

注:对于执行日期绑定变量隐式类型转换的语句,此系统不支持 EXPLAIN PLAN。
一般来说,使用绑定变量时,EXPLAIN PLAN 输出不代表实际的执行计划。


利用上图 显示的语法,以不同的方式启用 AUTOTRACE命令选项如下:

OFFSQL 语句禁用自动跟踪
ONSQL 语句启用自动跟踪
TRACE TRACE[ONLY]SQL 语句启用自动跟踪,并隐藏语句输出
EXPLAIN:显示执行计划,但不显示统计信息
STATISTICS:显示统计信息,但不显示执行计划

注:如果同时省略 EXPLAIN STATISTICS 命令选项,则默认方式是显示执行计划和统计信息。


可以通过设置 AUTOTRACE 系统变量来控制报表。下面是一些示例:

SET AUTOTRACE ON:AUTOTRACE 报表包括优化程序执行计划和 SQL 语句执行统计信息。
SET AUTOTRACE TRACEONLY EXPLAIN:AUTOTRACE 报表仅显示优化程序执行路径,不执行语句。
SET AUTOTRACE ON STATISTICS:AUTOTRACE 报表显示 SQL 语句执行统计信息和行。
SET AUTOTRACE TRACEONLY此语句类似于 SET AUTOTRACE ON但是它隐藏用户的查询输出(如果有)。如果启用了 STATISTICS,则仍将提取查询数据,但不会打印出来。
SET AUTOTRACE OFF不生成 AUTOTRACE 报表。这是默认设置。

例如:

SQL> show autotrace

autotrace OFF

SQL> set autotrace traceonly statistics

SQL> SELECT * FROM oe.products;

 

288 rows selected.

 

Statistics

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

                1334  recursive calls

          0  db block gets

        686  consistent gets

        394  physical reads

          0  redo size

     103919  bytes sent via SQL*Net to client

        629  bytes received via SQL*Net from client

         21  SQL*Net roundtrips to/from client

         22  sorts (memory)

          0  sorts (disk)

        288  rows processed

结果包含以下统计信息:  

recursive calls 指在用户级别和系统级别生成的递归调用数量。Oracle DB 维护用于内部处理的表。Oracle DB 需要更改这些表时,会在内部生成内部 SQL 语句,后者则生成递归调用。
db block gets 是请求 CURRENT 块的次数。
consistent gets 是对块请求一致读取的次数。
physical reads 是从磁盘读取的数据块的总数。此数量等于物理直接读取值加上读入缓冲区高速缓存的总数量。
redo size 是生成的重做总量(字节数)。
bytes sent via SQL*Net to client 是前台进程发送给客户机的总字节数。
bytes received via SQL*Net from client 是通过 Oracle Net 从客户机接收的字节总数。
SQL*Net roundtrips to/from client Oracle Net 发送给客户机以及从客户机接收的消息总数。




<点击:上海涛德Oracle OCM认证及BI商业智能课程>|人工智能培训-上海涛德 ( 沪ICP备14006824号 )|网站地图   My title page contents

GMT+8, 2019-4-24 15:09 , Processed in 0.136480 second(s), 14 queries , Gzip On.

回顶部