1、set autotrace traceonly命令
2、explain plan for命令
1)explain plan for select * from dual;
2)select * from table(dbms_xplan.display);
能够得到sql执行计划中每一个执行步骤所消耗的逻辑读,物理读,和花费的时间。实际上,也可以通过gather_plan_sstatistics Hint 配合dbms_xplan 包一起使用得到和10046事件类似细粒度的明细的执行计划。
三个步骤就可以通过10046事件获得sql的执行计划。
1.首先在当前session 中激活10046事件。
2.在当前session 中执行sql语句。
3.最后当前session 中关闭10046事件。
当执行完上述步骤后,oracle就会将目标sql的执行计划和明细资源消耗写入此session对应的trace文件中。
oracle会在user_dump_dest参数设置的目录下产生这个trace文件。
我们有两种方法在当前session中激活10046事件。
1.在当前session中执行alter session set events ‘10046 trace naem context forever,level 12‘
2.在当前session中执行oradebug event 10046 trace name context forever,level 12‘
上述命令中的关键字”level“后的数字是标识设置的10046时间的level值,这个值是可以修改的,我们
通常使用的值为12,表示在产生的trace文件中除了有目标sql的执行计划和资源消耗明细外,还包含
sql使用的绑定变量的值以及该session所经历的等待事件,除了level值外,其他的部分是固定的语法,
是无法修改的。
我推荐使用第2种方法,因为可以在激活10046事件后执行命令oradebug tracefile_name可以获得当前
session 所对应的trace文件的具体路径名称。
示例:
1.我们先激活10046事件,我们是oradebug命令来激活。sql>oradebug setmypid sql>oradebug event 10046 trace name context forver,level 12 2.在当前session中激活了10046事件后,我们执行一个sql语句sql>SELECT * FROM hr.test; 3.使用oradebug tracefile_name 命令查看当前session所对应的trace文件路径和名称sql>oradebug tracefile_name /app/oracle/diag/rdbms/pxboracle/pxboracle/trace/pxboracle_ora_18565.trc 4.关闭当前session 中的10046事件:sql>oradebug event 10046 trace name context off