Oracle获取执行计划的方法

获取执行计划有以下几种方法,普遍使用前四种方法:
(1)explain plan
(2)DBMS_XPLAN包
(3)sqlplus中的autotrace命令
(4)10046
(5)10053
(6)awrsqrpt.sql

1、explain plan命令

explain plan for <目标SQL>;
select * from table(dbms_xplan.display);

2、DBMS_XPLAN包

--查看刚刚被执行SQL的执行计划1select * from table(dbms_xplan.display_cursor(null,null,'advanced'));2select * from table(dbms_xplan.display_cursor('<sql_id>',<child_number>,'advanced'));

注:方法12,需要sql还在shared pool中

child_number通过v$sql获取:
SQL> select CHILD_NUMBER from v$sql where sql_id='c99yw1xkb4f1u';

CHILD_NUMBER
------------
	 0

--查看sql的历史执行计划3select * from table(dbms_xplan.display_awr('sql_id'));

3、sqlplus中的autotrace命令

set autotrace on
set autotrace off
set autotrace traceonly  --不显示查询结果输出
set autotrace traceonly explain --只显示执行计划部分

4、10046事件

1)当前会话打开10046
SQL> oradebug setmypid
SQL> oradebug event 10046 trace name context forever,level 122)当前会话执行sql
SQL> select * from test.test;
SQL> oradebug tracefile_name

(3)当前会话关闭10046
SQL> oradebug event 10046 trace name context off

格式化10046trc文件,使之易看易懂:
[oracle@network-bind ~]$ tkprof /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_14637.trc
output = orcl_ora_14637.txt

5、10053事件

1)当前会话打开10053
alter session set events='10053 trace name context forever, level 1';2)当前会话执行sql
select * from test;3)查看10053trc文件
SELECT D.VALUE || '/' || LOWER(RTRIM(I.INSTANCE, CHR(0))) || '_ora_' ||P.SPID || '.trc' AS "trace_file_name"FROM (SELECT P.SPID FROM V$MYSTAT M,V$SESSION S,V$PROCESS P WHERE M.STATISTIC# = 1 AND S.SID = M.SID AND P.ADDR = S.PADDR) P,(SELECT T.INSTANCE FROM V$THREAD T,V$PARAMETER V WHERE V.NAME = 'thread' AND (V.VALUE = 0 OR T.THREAD# = TO_NUMBER(V.VALUE))) I,(SELECT VALUE FROM V$PARAMETER WHERE NAME = 'user_dump_dest') D;4)当前会话关闭10053
alter session set events '10053 trace name context off';

6、awrsqrpt.sql

SQL> @?/rdbms/admin/awrsqrpt.sql

参考书籍:
崔华 著 《基于Oracle的SQL优化》

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值