oracle sql 高级编程学习笔记(十七)

痛定思痛。 2022-05-14 10:18 777阅读 0赞

查看任何之前已经执行过的sql语句保存在库高速缓存中的执行计划,最简单方法就是使用dbms_xplan.display_curor函数
使用 gather_plan_statistics 提示 则在sql执行后,会在v$sql_plan_statistics_all视图中查到SQL的执行统计信息,例如逻辑读,物理读取次数,物理写入次数以及每一个运算在一行数据上的运行时间。 或者也可以将statistics_level 实例参数的值设置为all,抓取这些统计信息确实增加了语句执行成本,所以不必总是把这个功能打开。而hint提示仅仅是在使用的语句上生效。gather_plan_statistics提示会显示Starts E-row(期望返回行数) ,A_rows

  1. select /*+gather_plan_statistics*/ e.empno,e.ename from emp e where e.ename='KING';

set serveroutput off;
//serveroutput 如果是打开的,都会隐式的调用dbms_output 如果没有将 serveroutput 关闭
//那么最后执行的一条语句将会是dbms_output的调用.将不能返回所执行sql语句,而是试图给你
//dbms_output调用所使用的计划

  1. SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(null,null,'ALLSTATS LAST'));

这里写图片描述

不使用提示 显示统计信息

这里写图片描述
可以看到警告信息中表明如何获取统计信息。

  1. SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(null,null,'ALLSTATS LAST'));

还可以使用sql_id child_number取值

sql_id child_number 通过V$sql获得

  1. select t.SQL_TEXT,t.SQL_ID,t.CHILD_NUMBER from v$sql t where t.SQL_TEXT like '%gather_plan_statistics%';

这里写图片描述

  1. SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR('692za5rczkx3w',0,'ALLSTATS LAST'));

同样也可以获得执行计划

这里写图片描述

发表评论

表情:
评论列表 (有 0 条评论,777人围观)

还没有评论,来说两句吧...

相关阅读