查看执行计划之AUTOTRACE开关
admin
2023-05-11 19:01:49
0

    在sqlplus中将autotrace开关打开也能得到目标sql的执行计划,而且,除此之外还能得到目标sql在执行时的资源消耗量,即通过设置AUTOTRACE开关我们可以额外观察到目标sql执行时所耗费的物理读,逻辑读,产生redo的数量已经排序的数量等。

    (1)在sqlplus的当前session中执行命令set autotrace on,可以在当前session中将autotrace开关完全打开。这样,在这个session中随后执行的所有sql除了显示sql执行结果之外,还会额外显示这些sql所对应的的执行计划和资源消耗情况。

    (2)在sqlplus的当前session中执行命令set autotrace off,可以在当前session中将autotrace开关关闭,这样,在这个session中随后执行的所有sql都只会显示sql执行结果,autotrace开关默认值是OFF。

    (3)在sqlplus的当前session中执行set autotrace traceonly,可以在当前session中将autotrace开关以不显示sql执行结果的具体内容的方式完全打开,这种方式与set autotrace on的唯一区别就在于,对于set autotrace traceonly而言,oracle 只会显示sql执行结果的数量,而不会显示执行结果的具体内容,这种情况下我们往往并不关心这些sql的执行结果的具体内容,而只是关心他们的执行计划和资源消耗情况。

    (4)在sqlplus的当前session中执行set autotrace traceonly explain,可以在当前session中将autotrace开关以只显示sql执行计划的范式打开。这种方式与set autotrace traceonly的区别就在于,set autotrace traceonly explain不会显示目标sql的资源消耗量和执行结果,而只会显示目标sql的执行计划。

    (5)在sqlplus的当前session中执行命令set autotrace traceonly statistic,可以在当前session中将autotrace开关以只显示sql的资源消耗方式打开。这种方式与set autotrace traceonly的唯一区别在于,set autotrace traceonly statistic不显示目标sql的执行计划,而只会显示目标sql的执行结果的数量和资源消耗量。

    设置autotrace开关的相关命令也沿用oracle一贯的可以使用简写的惯例,具体来说:

    关键字autotrace 可以简写为autot

    关键字traceonly可以简写为trace

    关键字explain可以简写为exp

    关键字statistic可以简写为stat

按照上述简写规则,如下的写法都是等价的

    set autotrace on简写为set autot on

    set autotrace off 简写为 set autot off

    set autotrace traceonly 简写为 set autot trace

    set autotrace traceonly explain 简写为set autot trace exp

    set autotrace traceonly statistic 简写为set autot trace stat

    这里还是以select empno,ename,dname from emp a,dept b where a.deptno=b.deptno;来说明:

    先使用set autotrace on

SQL> select empno,ename,dname from emp a,dept b where a.deptno=b.deptno;

     EMPNO ENAME      DNAME

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

      7782 CLARK      ACCOUNTING

      7839 KING       ACCOUNTING

      7934 MILLER     ACCOUNTING

      7566 JONES      RESEARCH

      7902 FORD       RESEARCH

      7876 ADAMS      RESEARCH

      7369 SMITH      RESEARCH

      7788 SCOTT      RESEARCH

      7521 WARD       SALES

      7844 TURNER     SALES

      7499 ALLEN      SALES

     EMPNO ENAME      DNAME

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

      7900 JAMES      SALES

      7698 BLAKE      SALES

      7654 MARTIN     SALES

14 rows selected.

Execution Plan

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

Plan hash value: 844388907

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

| Id  | Operation     | Name    | Rows  | Bytes | Cost (%CPU)| Time     |

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

|   0 | SELECT STATEMENT     |       |    14 |   364 |     6 (17)| 00:00:01 |

|   1 |  MERGE JOIN     |       |    14 |   364 |     6 (17)| 00:00:01 |

|   2 |   TABLE ACCESS BY INDEX ROWID| DEPT    |     4 |    52 |     2 (0)| 00:00:01 |

|   3 |    INDEX FULL SCAN     | PK_DEPT |     4 |       |     1 (0)| 00:00:01 |

|*  4 |   SORT JOIN     |       |    14 |   182 |     4 (25)| 00:00:01 |

|   5 |    TABLE ACCESS FULL     | EMP     |    14 |   182 |     3 (0)| 00:00:01 |

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

Predicate Information (identified by operation id):

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

   4 - access("A"."DEPTNO"="B"."DEPTNO")

       filter("A"."DEPTNO"="B"."DEPTNO")

Statistics

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

 0  recursive calls

 0  db block gets

10  consistent gets

 0  physical reads

 0  redo size

941  bytes sent via SQL*Net to client

524  bytes received via SQL*Net from client

 2  SQL*Net roundtrips to/from client

 1  sorts (memory)

 0  sorts (disk)

14  rows processed

    我们可以看到,执行set autotrace on后再执行目标sql,除了显示具体的执行结果之外还会显示该sql的执行计划和资源消耗情况。

    接着使用set autotrace traceonly

    

SQL> select empno,ename,dname from emp a,dept b where a.deptno=b.deptno;

14 rows selected.

Execution Plan

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

Plan hash value: 844388907

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

| Id  | Operation     | Name    | Rows  | Bytes | Cost (%CPU)| Time     |

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

|   0 | SELECT STATEMENT     |       |    14 |   364 |     6 (17)| 00:00:01 |

|   1 |  MERGE JOIN     |       |    14 |   364 |     6 (17)| 00:00:01 |

|   2 |   TABLE ACCESS BY INDEX ROWID| DEPT    |     4 |    52 |     2 (0)| 00:00:01 |

|   3 |    INDEX FULL SCAN     | PK_DEPT |     4 |       |     1 (0)| 00:00:01 |

|*  4 |   SORT JOIN     |       |    14 |   182 |     4 (25)| 00:00:01 |

|   5 |    TABLE ACCESS FULL     | EMP     |    14 |   182 |     3 (0)| 00:00:01 |

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

Predicate Information (identified by operation id):

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

   4 - access("A"."DEPTNO"="B"."DEPTNO")

       filter("A"."DEPTNO"="B"."DEPTNO")

Statistics

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

 0  recursive calls

 0  db block gets

10  consistent gets

 0  physical reads

 0  redo size

941  bytes sent via SQL*Net to client

524  bytes received via SQL*Net from client

 2  SQL*Net roundtrips to/from client

 1  sorts (memory)

 0  sorts (disk)

14  rows processed

    我们可以看到,执行set autotrace traceonly后再执行目标sql,除了该sql的执行结果的具体内容没有显示出来之外,其他的都和使用set autotrace on的显示结果一模一样。

    我们来使用set autotrace traceonly explain

SQL> set autotrace traceonly explain

SQL> select empno,ename,dname from emp a,dept b where a.deptno=b.deptno;

Execution Plan

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

Plan hash value: 844388907

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

| Id  | Operation     | Name    | Rows  | Bytes | Cost (%CPU)| Time     |

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

|   0 | SELECT STATEMENT     |       |    14 |   364 |     6 (17)| 00:00:01 |

|   1 |  MERGE JOIN     |       |    14 |   364 |     6 (17)| 00:00:01 |

|   2 |   TABLE ACCESS BY INDEX ROWID| DEPT    |     4 |    52 |     2 (0)| 00:00:01 |

|   3 |    INDEX FULL SCAN     | PK_DEPT |     4 |       |     1 (0)| 00:00:01 |

|*  4 |   SORT JOIN     |       |    14 |   182 |     4 (25)| 00:00:01 |

|   5 |    TABLE ACCESS FULL     | EMP     |    14 |   182 |     3 (0)| 00:00:01 |

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

Predicate Information (identified by operation id):

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

   4 - access("A"."DEPTNO"="B"."DEPTNO")

       filter("A"."DEPTNO"="B"."DEPTNO")

    我们可以看到,执行set autotrace traceonly explain后再执行目标sql,只显示该sql的执行计划。

    最后我们来使用set autotrace traceonly statistic

    

SQL> select empno,ename,dname from emp a,dept b where a.deptno=b.deptno;

14 rows selected.

Statistics

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

 0  recursive calls

 0  db block gets

10  consistent gets

 0  physical reads

 0  redo size

941  bytes sent via SQL*Net to client

524  bytes received via SQL*Net from client

 2  SQL*Net roundtrips to/from client

 1  sorts (memory)

 0  sorts (disk)

14  rows processed

    我们可以看到,执行set autotrace traceonly statistic后再执行目标sql,只显示该sql的执行结果的数量和资源使用消耗量。

    

相关内容

热门资讯

以军士兵集体丢掉武器抗命,大喊... 据凤凰卫视报道,以色列国防军一军事基地7月30日发生士兵抗命事件,约120名士兵抗议指挥官做法,将武...
蒋成华任商务部副部长 国务院任免国家工作人员。任命蒋成华为商务部副部长。免去蒋成华的商务部国际贸易谈判副代表职务。
伊朗驻华大使:在军事威胁下,不... 新华社北京7月31日电(记者刁慧琳) 伊朗驻华大使法兹里7月28日表示,伊美回到谈判桌的前提是美国必...
伊朗革命卫队在霍尔木兹海峡击中... 当地时间31日,伊朗伊斯兰革命卫队发布声明称,革命卫队海军当天在霍尔木兹海峡击中并扣留了两艘违反禁令...
美媒:特朗普,遇到了一个更强硬... 据《纽约时报》7月29日报道,就在特朗普总统看似放弃战事升级计划几天后,美国再次与伊朗交火。上周末,...
女子做气管镜时不幸身亡,丈夫称... 7月29日,西安刘先生反映妻子在当地医院做支气管镜检查时死亡,看监控时发现医生疑有违规操作。刘先生表...
全网“帮卖西瓜”,然后呢? 近日,河南部分地区西瓜滞销的消息在网上热度很高。很多地方也伸出援手:有景区收购千斤西瓜、免费赠予游客...
美媒:乌克兰袭击伊朗船只,险引... 据《纽约时报》7月28日报道,据伊朗和西方官员称,伊朗曾考虑攻击乌克兰的一个港口,以报复乌克兰对一艘...
20年里,他只画美女,用东方风... 迈进KIM在上海的工作室,迎面是一整墙的美女们。她们像是刚从一场时髦的沙龙里退场,或倚或立,眉宇间是...
Google在港推出AI代理G... 观点网讯:7月29日,Google在香港推出AI代理Gemini Spark,该代理可全天候在后台运...