oracle 产看执行计划_[ORACLE] ORACLE 查看执行计划 的方式

ORACLE 查看执行计划 的方式

获取方法

优点

缺点

[explain plan for] plsql按F5

explain plan for select * fromdual;select * from table(dbms_xplan.display());

无需真正执行,快捷方便

1.没有输出相关统计信息,例如产生了多少逻辑读,多少次物理读,多少次递归调用的情况;

2.无法判断处理了多少行;

3.无法判断表执行了多少次

[set autotrace on]-sql*plus

set autotrace on

select * from dual;

1.可以输出运行时的相关统计信息(产生多少逻辑读、多少次递归调用、多少次物理读等);

2.虽然要等语句执行完才能输出执行计划,但是可以有traceonly开关来控制返回结果不打屏输出;

1.必须要等SQL语句执行完,才出结果;

2.无法看到表被访问了多少次;

[statistics_level=all]

alter session set statistics_level=all;set serveroutput off

SELECT * FROMTEST01;select * from table(dbms_xplan.display_cursor(null,null,'ADVANCED ALLSTATS LAST PEEKED_BINDS'))

1.可以清晰的从starts得出表被访问多少次;

2.可以从E-Rows和A-Rows得到预测的行数和真实的行数,从而可以准确判断Oracle评估是否准确;

3.虽然没有准确的输出运行时的相关统计信息,但是执行计划中的Buffers就是真实的逻辑读的数值;

1.必须要等执行完后才能输出结果;

2.无法控制结果打屏输出,不像autotrace可以设置traceonly保证不输出结果;

3.看不出递归调用,看不出物理读的数值

[dbms_xplan.display_cursor]

select * from table(dbms_xplan.display_cursor('04jc5nwr30r01',null,'allstats last'));select * from table( dbms_xplan.display_cursor('&sql_id') );

1.知道sql_id即可得到执行计划,与explain plan for一样无需执行;

2.可得到真实的执行计划

1.没有输出运行的统计相关信息;

2.无法判断处理了多少行;

3.无法判断表被访问了多少次;

[事件10046 trace]

步骤1:alter session set events '10046 trace name context forever,level 12'; --开启追踪

步骤2:执行sql语句;

步骤3:alter session set events '10046 trace name context off'; --关闭追踪

步骤4:找到跟踪后产生的文件(开启10046前先用‘ls -lrt’看一下文件,执行结束后再看哪个是多出来的文件即可)

步骤5:tkprof trc文件 目标文件sys=no sort=prsela,exeela,fchela --格式化命令

1.可以看出sql语句对应的等待事件;

2.如果函数中有sql调用,函数中有包含sql,将会被列出,无处遁形;

3.可以方便的看处理的行数,产生的逻辑物理读;

4.可以方便的看解析时间和执行时间;

5.可以跟踪整个程序包

1.步骤繁琐;

2.无法判断表被访问了多少次;

3.执行计划中的谓词部分不能清晰的展现出来

查看的级别

alter system set statistics_level=all;

alter session set statistics_level=all;

select /*+ gather_plan_statistics*/...

附1 dbms_xplan.display_cursor

ALLSTATS = IOSTATS(IO buffer,Reads)+MEMSTATS(Omem 1Mem Used-Mem)

LAST:                仅显示最后一次执行的统计信息

ADVANCED:          显示 outline,Query Block name,column project 等信息

PEEKED_BINDS:    打印解析时使用的绑定变量

TYPICAL:           不打印PROJECTION,ALIAS

附二,查看SQLID

select sql_id ,sql_text from v$sql where sql_text like '%$SQL%' #$SQL 指你的SQL文本

附三,查看父游标,子游标

#父游标select * from v$SQLAREA where SQL_ID=''#子游标select * from v$sql where sql_ID='';select * from v$sql_plan where sql_ID=''; #plan 查看position,depth,oder ,以作树形图

select * from v$sql_optimizer_env where sql_ID='';#优化环境

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值