第一种:explainplan命令(plsqldevoloper中的F5键在内部也是调用的此命令)
用法:依次执行以下语句
explainplanfor目标sql
select*fromtable(dbms_xplan.display);
第二种:使用dbms_xplan包
(1)select*fromtable(dbms_xplan.display);
与explainplan命令配合使用
(2)select*fromtable(dbms_xplan.display_cursor(null,null,'advanced'));
在sqlplus中查看刚刚执行
(3)select*fromtable(dbms_xplan.display_cursor('sql_id/hash_value',child_cursor_number,'advanced'));
查看指定sql的执行计划
(4)select*fromtable(dbms_xplan.display_awr('sql_id'));
用于查看指定sql的所有历史执行计划
第三种:sqlPLUS中的autotrace开关
SETAUTOTRACEOFF(默认值)(等价于SETAUTOTOFF)
SETAUTOTRACEON(等价于SETAUTOTON)
SETAUTOTRACETRACEONLY(不显示执行sql的结果)(等价于SETAUTOTTRACE)
SETAUTOTRACETRACEONLYEXPLAIN(只显示sql执行计划)(等价于SETAUTOTTRACEEXP)
SETAUTOTRACETRACEONLYSTATISTICS(只显示sql资源消耗量)(等价于SETAUTOTTRACESTAT)
第四种:10046事件
查看目标sql执行计划的一种方法,和上面三种方法的不同之处在于,此方法得到的执行计划明确显示了目标sql实际执行计划中每一步骤所消耗的逻辑读、物理读和花费的时间。
使用以下三个步骤来执行10046事件:
(1)首先在当前session中激活10046事件
(2)在此session中执行目标sql
(3)在此session中关闭10046事件
上面步骤执行完后,相关数据写入trace文件中
trace文件存放于USER_DUMP_DEST中
trace文件的格式为“实例名_ora_当前session的spid.trc”
激活10046的方法,一般有以下两种:
--altersessionsetevents'10046tracenamecontextforever,level12'
--oradebugevent10046tracenamecontextforever,level12
推荐使用oradebug方式,此方式可以在激活10046事件后oradebugtracefile_name来得到trc文件的目录和名称
--altersessionsetevents'10046tracenamecontextoff'
--oradebugevent10046tracenamecontextoff
需要使用tkprof来格式化trc文件(tkprof命令位于$ORACLE_HOME/BIN目录下)