千家信息网

查看执行计划之AUTOTRACE开关

发表于:2024-11-20 作者:千家信息网编辑
千家信息网最后更新 2024年11月20日,在sqlplus中将autotrace开关打开也能得到目标sql的执行计划,而且,除此之外还能得到目标sql在执行时的资源消耗量,即通过设置AUTOTRACE开关我们可以额外观察到目标sql执行时所耗
千家信息网最后更新 2024年11月20日查看执行计划之AUTOTRACE开关

在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的执行结果的数量和资源使用消耗量。


结果 目标 简写 资源 消耗 中将 数量 方式 关键 关键字 内容 命令 情况 消耗量 来使 一模一样 写法 只是 惯例 物理 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 知网数据库期刊 云南最大服务器云主机 绍兴小智网络技术 如何解决网络安全问题账号 服务器崩溃如何查看记录 数据库查询平均成绩前两名 阿里云的服务器管理面板 中牟软件开发专业 公安厅关于企业网络安全要求 海南万稷网络技术有限公司游戏进不去 大专网络技术和应用技术 服务器时间与带外同步 web网络技术 软件开发自我鉴定范文 服务器系统盘设置多大合适 网络安全生产月专题 导行式数据库 app需要什么样子的服务器 中信银行青岛软件开发招聘 广州富仓网络技术有限公司 英伟达显卡散热器服务器 中国最大的软件开发上市公司 安徽易也网络技术有限公司 mimic数据库的优缺点 c 中在数据库读取 招聘网络技术员信息怎么写 刺激战场最好玩的一个服务器 软件开发需要哪些人员配备 苏州利他心网络技术有限公司 子组件获取父组件数据库
0