获得执行计划方法-一 ORACLE AUTOTRACE

ORACLE sql trace

AUTOTRACE 命令

1 SET AUTOTRACE OFF                   此为默认值,即关闭Autotrace
2 SET AUTOTRACE ON                    产生结果集和解释计划并列出统计
3 SET AUTOTRACE ON EXPLAIN            显示结果集和解释计划不显示统计
4 SETAUTOTRACE TRACEONLY              显示解释计划和统计,尽管执行该语句但您将看不到结果集
5 SET AUTOTRACE  TRACEONLY STATISTICS 只显示统计

SQL> set autotrace on
SQL> select * from dual
  2  ;

D
-
X

Execution Plan
----------------------------------------------------------
Plan hash value: 272002086

--------------------------------------------------------------------------
| Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |      |     1 |     2 |     2   (0)| 00:00:01 |
|   1 |  TABLE ACCESS FULL| DUAL |     1 |     2 |     2   (0)| 00:00:01 |
--------------------------------------------------------------------------

Statistics
----------------------------------------------------------
          1  recursive calls
          0  db block gets
          3  consistent gets
          0  physical reads
          0  redo size
        407  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

各统计信息含义
db block gets    从buffer cache中读取的block的数量
consistent gets  从buffer cache中读取的undo数据的block的数量
physical reads   从磁盘读取的block的数量
redo size        DML生成的redo的大小
sorts (memory)   在内存执行的排序量
sorts (disk)     在磁盘上执行的排序量

db block gets 是取得current mode下的buffer cache
consistent gets 取的是consistent  mode 下buffer cache ,其中consistent  read 需要undo block 构造一致读块

官方文档如下

  • Current mode

    A current mode get, also called a db block get, is a retrieval of a block as it currently appears in the buffer cache.

    current mode 也叫 db block get ,是对buffer cache 中当前块的检索。

    For example, if an uncommitted transaction has updated two rows in
    a block, then a current mode get retrieves the block with these
    uncommitted rows.

    例如,如果一个尚未提交的事物修改了一个块的两行,current模式个检索块时,包括两个尚未提交的行

    The database uses db block gets most frequently during modification
    statements, which must update only the current version of the block.

    数据库通常在使用修改语句时  使用db block get ,哪个必须修改当前块的版本。

  • Consistent mode

    A consistent read get is a retrieval of a read-consistent version of a block. This retrieval may use undo data.

    一致读读取的是块的一致性版本,这通常要使用undo 块。

    For example, if an uncommitted transaction has updated two rows in
    a block, and if a query in a separate session requests the block,

    例如 一个未提交事物修改了一个块的两行,另一个session查询这个块

    then the database uses undo data to create a read-consistent
    version of this block (called a consistent read clone) that does not
    include the uncommitted updates.

    数据库使用undo,创建一个一致读版本的块(被称为一致读的块克隆),不包含未提交的update。

    Typically, a query retrieves blocks in consistent mode.
    典型的,查询在一致读模式下进行检索

获得执行计划方法-一 ORACLE AUTOTRACE,布布扣,bubuko.com

时间: 2024-11-20 15:19:28

获得执行计划方法-一 ORACLE AUTOTRACE的相关文章

Oracle获取执行计划方法

获取执行计划的6种方法 1. explain plan for获取: 2. set autotrace on : 3. statistics_level=all; 4. 通过dbms_xplan.display_cursor输入sql_id参数直接获取 5. 10046 trace跟踪 6. awrsqrpt.sql 适用场合分析 1.如果某SQL执行非常长时间才会出结果,甚至慢到返回不了结果,这时候看执行计划就只能用方法1: 2.跟踪某条SQL最简单的方法是方法1,其次就是方法2,方法2要执行

获得执行计划方法三-sql_trace

1 追踪这个sesion SQL> alter session set sql_trace=true ; Session altered. 2 执行想要跟踪的语句 SQL> select * from scott.emp ;      EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM ---------- ---------- --------- ---------- --------- --------

获得执行计划方法四-使用10046事件

我们也可以通过设置10046事件来进行SQL跟踪,并且可以设置不同的跟踪级别,比使用SQL_TRACE获得更多的信息. 10046事件不但可以跟踪用户会话(trace文件位于USER_DUMP_DEST ),也可以跟踪background进程(trace文件位于BACKGROUND_DUMP_DEST ).trace文件的大小决定于4个因素:跟踪级别,跟踪时长,会话的活动级别和MAX_DUMP_FILE_SIZE参数. 启用跟踪事件10046 1.在全局设置 修改初始化参数 EVENT = "1

获得执行计划方法二-explain plan

1 安装 $ORACLE_HOME/rdbms/admin/utlxplan.sql (UNIX)  脚本生成一个表这个程序会创建一个名为plan_table的表 2 运行 explain PLAN [ SET STATEMENT_ID [=] < string literal > ] [ INTO < table_name > ] FOR < sql_statement > 其中: STATEMENT_ID:是一个唯一的字符串,把当前执行计划与存储在同一PLAN中的其

oracle执行计划解释

设置执行计划方法: set autotrace off          默认值,关闭执行计划 set autotrace on explain     只显示执行计划 set autotrace on statistics   只显示执行计划统计信息 set autotrace on          显示执行计划和统计信息 set autotrace traceonly      与on相似,不显示语句的执行结果 1.oracle数据库访问数据的方法 (1).全表扫描(Full Table

Oracle执行计划并取得数据行

一个执行计划就是告诉Oracle对于每一个表对象使用哪种访问方法以及什么联接和联接顺序来将多个表联接到一起的一系列命令.执行计划中的每个步骤产生一个行源,然后与另外一个行源相联接,直到所有对象都被访问和联接. Oracle中的查询计划将会完成解析,绑定,执行和提取的步骤. Oracle每次访问数据块的时候,Oracle都会从该块中取出数据行然后在一次回路中返回给客户端.一次返回的行数是一个可配置的值称为列大小.列大小是一个网络回路中一次可以传输的可能行数.而列大小的设置可以是通过编程改变.在SQ

最权威Oracle获取SQL执行计划大全

该文档为根据相关资料整理.总结而成,主要讲解Oracle数据库中,获取SQL语句执行计划的最权威.最正确的方法.步骤,此外,还详细说明了每种方法中可选项的意义及使用方法,以方便大家和自己日常工作中查阅使用,因本人未发现本博客支持附件上传功能,需要PDF文件格式的朋友可向我要,也可到群里下载,转载请注明出处. 1.查询v$sql_plan: SQL> col "Query Plan_Table" format a100 SQL> select id,lpad(' ', 2*(

在Oracle中,如何得到真实的执行计划?

<h1 color:#000000;font-size:16px;margin:0px;padding:0px;white-space:normal;background-color:#ffffff;"="" style="word-wrap: break-word; margin: 0px; padding: 0px;">Oracle查看执行计划的几种方法:http://blog.itpub.net/26736162/viewspace-21

Oracle 查询真实执行计划

什么是真实执行计划 获取Oracle的执行计划,有几种方式.(本文使用Oracle 11g XE版本,以及普通用户scott登录) explain plan for 有两个步骤: explain plan for ${SQL} select * from table(dbms_xplan.display); 这一个方法可以在PLSQLDev的cmd窗口和sql窗口执行,同时不需要给用户授权. 示例: autotrace 有两个步骤: set autot on 执行${SQL} 但普通用户需要授权