继续进行上次未完的任务,下面继续介绍在ORACLE查看执行计划的它方法:
三,SQLPLUS中的AUTOTRACE开关
在SQLPLUS将AUTOTRACE开关打开也能得到目标SQL的执行计划,而且,除此之外还能得到目标SQL在执行时的资源消耗量,如物理读,逻辑读,产生的redo的数量以及排序的数量等。
具体语法如下所示:
SET AUTOTRACE(OFF|ON|TRACEONLY)
[EXPLAIN]
[STATISTICS]
在SQLPLUS的当前Session中执行命令SET AUTOTRACE ON,可以得到执行结果和执行计划以及资源消耗情况;选择OFF就只会得到执行结果,默认的设置是OFF;选择TRACEONLY,和ON的唯一区别在于它只会显示SQL执行结果的数量,而不会显示执行结果的具体内容。
另外AOTOTRACE开关的命令可以使用简称来替代,AUTOTRACE可以用AUTOT来代替,TRACEONLY可以用TRACE来替代,EXPLAIN可以用EXP来替代,STATISTICS可以用STAT来替代。
四, 10046事件与tkprog命令
使用10046事件实在ORACEL数据库中查看目标SQL执行计划的另外一种方法,这个方法和前面三个方法不同之处在于它在执行计划中明确显示来目标SQL实际执行计划中每一个执行步骤所消耗的逻辑读,物理读和花费的时间,这种细粒度的明细显示在我们诊断复杂SQL的性能问题时尤为有用。用10046事件得到目标SQL的执行计划只需要执行以下三个步骤:
首先在当前的Session中激活10046事件;
接着在此Session中执行目标SQL;
最后在此Session中关闭10046事件。
通常有以下两种方法在当前的Session中激活10046事件:
1.在Session中执行
alter session set event '10046 trace name context forever ,level 12'
2.在Session中执行
oradebug event 10046 trace name context forver,level 12
对应关闭10046事件也有两种方法:
1.在Session中执行
alter session set event '10046 trace name context off'
2.在Session中执行
oradebug event 10046 trace name context off
上面四种方法是查看执行计划的主要的四种方法,当然还有其它的几种方法,如10053事件,AWR报告或者Statsoack报告,一些现成的脚本(如display_cursor_9i.sql)等,这里就不详细讲了
网友评论