在ORACLE中如何查看执行计划(一)

       一般说来,ORACLE中SQL的优化,在很大程度上是对执行计划的调整,因而学会如何查看执行计划就显得尤为重要。在ORACLE数据库中,我们通常有以下几种方法得到目标SQL的执行计划:

(1)使用explain plan命令;

(2)使用DBMS_XPLAN包;

(3)SQLPLUS中的AUTOTRACE开关

(4) 10046事件

(5)10053事件

(6)AWR报告或者Statsoack报告

(7)一些现成的脚本(如display_cursor_9i.sql)

一,explain plan命令

          对于初学者来说,一般在得到sql执行计划的时候,往往会直接在PL/SQL Developver中直接使用快捷键F5,我开始也是这么做的。

         实际上,当你按下快捷键F5的时候,PL/SQL Developer就调用了explain plan命令,按快捷键F5只不过是对explain plan命令上进行的一层封装而已。

explain plan 命令的语法是依次执行如下两条命令:

explain plan for +目标 SQL

select * from table(dbms_xplan.display);

二,使用DBMS_XPLAN包

       使用DBMS_PLAN 包中的方法是在ORACLE数据库中得到目标SQL的第二种方法,针对不同的应用场景,你可以选择如下四种方法的一种:

1.select * from table(dbms_xplan.display);

2.select * from table(dbms_xplan.display_cursor(null,null,'advanced'));

3.select * from table(dbms_xplan.display_cursor('sql_id/hash value',child_cursor_number,'advanced'));

4.select * from table(dbms_xplan.display_awr('sql_id‘));

       方法1本质上就是和方法一是一样的,在这里不再说明。

       方法2用于SQLPLUS中查看刚刚执行过的SQL的执行计划,直接跟在刚执行过的SQL 语句后面执行一遍就好。 dbms_xplan.display_cursor中的前两个参数都是null,第三个参数有两种选择,一种是‘all’,一种是‘advanced’,只不过‘advanced’的显示结果会比‘all’的结果更详细些。

       方法3用于查看指定SQL的执行计划,这里针对dbms_xplan.display_cursor中有传入三个参数,第一个参数为目标sql的sql_id或者hash valune,第二个参数是查看执行计划所传入的Child_Cursor_Number,第三个参数在方法2中已经说明了,具体语法如下:

select sql_text,sql_id,hash_value,child_number from v$sql where sql_text like' 目标SQL部分语句%‘

       从中可以得到sql_id,hash_value,child_number,然后把这些代入对应的语句中,就可以得到指定SQL的执行计划。只要目标SQL的执行计划所在的Child Cursor还没有被age out出share pool,就可以使用方法3来得到该SQL的执行计划。

        方法4用于查看指定sql的所有历史执行计划,使用方法2,3的前提条件是该sql的执行计划还在Share Pool中,而如果该SQL的执行计划已经被age out出Share Pool,那么只要该SQL的执行计划被Oracle采集到AWR Repository中,我们就可以用方法4来查看该sql所有的历史执行计划。

          由于时间原因,下篇继续





©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 解释计划 语句explain plan用来显示优化器为sql语句选择的执行计划。 执行结果 这儿使用了explai...
    猫猫_tomluo阅读 2,524评论 0 11
  • 查看执行计划的命令有很多种,但是,其实究其原理无非是通过如下四种途径: 查询PLAN_TABLE$表,并将表中的记...
    6chen阅读 2,408评论 0 2
  • 执行计划管理 1. 执行计划管理的工作原理 我们知道,SQL语句的性能很大程度上依赖于SQL语句的执行计划。如果...
    xiaoyuhao阅读 1,628评论 0 3
  • 头发长了又长,及腰的时候总想要嫁给你。 第二个人要帮我介绍第三个对象 我是有多恨嫁? 还是变显得找不到男朋友太过明...
    to吉尔阅读 283评论 0 0
  • 125 乍见心欢 小别思恋 久处仍怦然
    许世挺阅读 153评论 0 0