概述

DBMS_XPLAN是Oracle提供的一个用于查看SQL计划,包括执行计划和解释计划的包;在以前查看SQL执行计划的时候,我都是直接使用set autotrace命令,不过DBMS_XPLAN包也给出了更加简化的获取和显示计划的方式。


DBMS_XPLAN包

这几个函数分别对应不同的显示计划的方式,DBMS_XPLAN包不仅可以获取解释计划,它还可以用来输出存储在AWR,SQL调试集,缓存的SQL游标,以及SQL基线中的语句计划,实现如上的功能,通常会用到一下几个方法:

1.DISPLAY

2.DISPLAY_AWR

3.DISPLAY_CURSOR

4.DISPLAY_PLAN

5.DISPLAY_SQL_PLAN_BASELINE

6.DISPLAY_SQLSET

下面看一个经常使用的查看某条语句的解释计划示例:

SQL> explain plan for select * from scott.emp;SQL> select * from table(dbms_xplan.display);-- 对应autotrace实现SQL> set autotrace traceonly explain

上例中使用了dbms_xplan.display方法来显示PLAN_TABLE中保存的解释计划,如果想要显示执行计划,就需要使用到DMBS_XPLAN.DISPLAY_CURSOR方法了,DMBS_XPLAN.DISPLAY_CURSOR调用签名:

DBMS_XPLAN.DISPLAY_CURSOR( sql_id IN VARCHAR2 DEFAULT NULL, child_number IN NUMBER DEFAULT NULL, format IN VARCHAR2 DEFAULT 'TYPICAL');

sql_id表示存储在cursor cache中的SQL语句的id,child_number用于指示缓存sql语句计划的子id,format参数用于控制包含在输出中的信息类型,官档的参数如下:

1.BASIC: 显示最少的信息,只包括操作类型,ID名称和选项。2.TYPICAL: 默认值,显示相关信息以及某些附加的显示选项,如分区和并发使用等。3.SERIAL: 与TYPICAL类型相似,区别是它不包括并发的信息,即使是并行执行的计划。4.ALL: 显示最多的信息,包含了TYPICAL的全部以及更多的附加信息,如别名和远程调用等。

除了以上的基本的四种输出格式外,format还有一些附加的选项可用于定制化输出行为,使用中可以通过逗号和空格分隔来声明多个关键字,同时可以使用”+”和”-”符号来包含或排除相应的显示元素,这些附加的选项在官档中也有记载:

1.ROWS – 显示被优化器估算的记录的行号2.BYTES – 显示优化器估算的字节数3.COST – 显示优化器计算的成本信息4.PARTITION – 显示分区的分割信息5.PARALLEL – 显示并行执行信息6.PREDICATE – 显示谓语7.PROJECTION – 显示列投影部分(每一行的那些列被传递给其父列已经这些列的大小)8.ALIAS – 显示查询块名称已经对象别名9.REMOTE – 显示分布式查询信息10.NOTE – 显示注释11.IOSTATS – 显示游标执行的IO统计信息12.MEMSTATS – 为内存密集运算如散列联结,排序,或一些类型的位图运算显示内存管理统计信息13.ALLSTATS – 与'IOSTATS MEMSTATS'等价14.LAST – 显示最后执行的执行计划统计信息,默认显示为ALL类型,并且可以累积。

以上的参数同样适用于解释计划的display方法。


实例演示

1、使用display_cursor方法查看最近一条语句的执行计划

SQL> select /*+ gather_plan_statistics */ count(*) from scott.emp; SQL> select * from table(dbms_xplan.display_cursor(null,null,'ALLSTATS LAST'));

使用dbms_xplan.display_cursor(null,null,'ALLSTATS LAST')时,将sql_id和child_number设置成null,表示获取上一条执行语句的执行计划;注意上面的例子中一定要指定gather_plan_statistics提示或者手动设置数据库STATISTICS_LEVEL参数为ALL来使得其抓取行数据源的执行统计信息,这些信息包括行数,一直读取次数,物理读次数,物理写次数以及运算在一行数据上耗费的运行时间,如果没有指定该提示,就不会有A-Rows,A-Time,Buffers这三列信息。

2、获取某条指定语句的执行计划

SQL> select /*+ gather_plan_statistics */ count(*) from scott.emp where sal in (1250, 1300);-- 通过v$sql视图查询到sql语句的SQL_ID和CHILD_NUMBERSQL> select sql_id,child_number,sql_text from v$sql where sql_text like '%select /*+ gather_plan_statistics */ count(*)%';-- 获取对应的执行计划SQL> select * from table(dbms_xplan.display_cursor('5qxmkvh40yw0p',0,'ALLSTATS LAST'));

3、通过format参数定制执行计划输出信息

-- 使用ALL来显示解释计划的全部信息SQL> explain plan for select * from emp e, dept d where e.deptno = d.deptno and e.ename = 'JONES' ;SQL> select * from table(dbms_xplan.display(format=>'ALL'));-- 去除执行计划上的字节数和成本统计信息SQL> select empno, ename from emp e, dept d where e.deptno = d.deptno and e.ename = 'JONES' ;SQL> select * from table(dbms_xplan.display_cursor(null,null,format=>'ALLSTATS LAST -COST -BYTES'));-- 另一种选项,窥视绑定变量的值,非常方便!!SQL> variable v_empno numberSQL> exec :v_empno := 7566 ;SQL> select * from emp where empno = :v_empno ;SQL> select * from table(dbms_xplan.display_cursor(null,null,format=>'+PEEKED_BINDS'));-- 并行查询信息筛选SQL> select /*+ parallel(d, 4) parallel (e, 4) */ d.dname, avg(e.sal), max(e.sal) from scott.dept d, scott.emp e where d.deptno = e.deptno group by d.dname order by max(e.sal), avg(e.sal) desc;SQL> select * from table(dbms_xplan.display_cursor(null,null,'TYPICAL -BYTES -COST'));

显示解释计划的全部信息

并行查询信息筛选


查看执行计划有很多方式,大家看自己习惯重点掌握一两种就可以了,后面会分享更多DBA方面的内容,感兴趣的朋友可以关注一下~

dbms中怎么跨数据源拷贝数据_Oracle中使用DBMS_XPLAN处理执行计划详解相关推荐

  1. oracle 删除列 大数据_Oracle 删除指定sql的执行计划。

    1. oracle10g以前我们都是直接刷新共享池,但这样数据库中所有sql的执行计划都会被删掉.这种办法也不可取,下面简单介绍一下这种办法: 测试版本: SQL> select * from ...

  2. ocacle 执行计划_Oracle执行计划详解

    (VG8\%x.\)\0简介:ITPUB个人空间Lp9ohHv }*V 本文全面详细介绍oracle执行计划的相关的概念,访问数据的存取方法,表之间的连接等内容. /V(Odd$J+S#M0E0    ...

  3. mysql 执行计划详解,Mysql中的explain执行计划详解(1)

    创建一个表test_explain,并添加入下的数据 mysql> create  table test_explain( a int primary key, b int); Query OK ...

  4. 将报表模板中数据集的数据源名称与服务器中的数据源名称修改一致.,连接数据库,服务器端的几个常见错误...

    1错误关键字:数据集ds1中未设定数据源名称 现象: 产生数据工厂:com.runqian report4.dataset.SQLDataSetFactory 失败:数据集中,数据集ds1 中未设定数 ...

  5. r导出html怎么保存,做植物谱系图,用Phylomatic软件将网页中的输出结果拷贝到文本文件中, 并另存为phylo...

    我是一个本科生,大四做毕设,要用到Phylomatic在线软件,我对计算机不是很熟,我的专业也只是环境科学,跟植物无关,所以对此非常不熟悉,用R做完plantlist后,再用Phylomatic在线软 ...

  6. 假定在使用CSMA/CD协议的10Mb/s以太网中某个站在发送数据时检测到碰撞,执行退避算法时选择了随机数r=100。试问这个站需要等待多长时间后才能再次发送数据?如果是100Mb

    假定在使用CSMA/CD协议的10Mb/s以太网中某个站在发送数据时检测到碰撞,执行退避算法时选择了随机数r=100.试问这个站需要等待多长时间后才能再次发送数据?如果是100Mb/s的以太网呢? 以 ...

  7. 融云发送自定义消息_数据源管理 | Kafka集群环境搭建,消息存储机制详解

    一.Kafka集群环境 1.环境版本 版本:kafka2.11,zookeeper3.4 注意:这里zookeeper3.4也是基于集群模式部署. 2.解压重命名 tar -zxvf kafka_2. ...

  8. 数据源管理 | Kafka集群环境搭建,消息存储机制详解

    本文源码:GitHub·点这里 || GitEE·点这里 一.Kafka集群环境 1.环境版本 版本:kafka2.11,zookeeper3.4 注意:这里zookeeper3.4也是基于集群模式部 ...

  9. 全民大数据时代已来 阿里数加平台详解

    文章讲的是全民大数据时代已来 阿里数加平台详解,业界流行一种说法,云计算与大数据就是一枚硬币的两面,相生相惜,不可分割.在当下互联网时代,数据的价值越来越受到社会的认可,并在今天,已然成为一种普惠资源 ...

最新文章

  1. arcgis Server Object Extension (SOE)部署jar文件失败 原因探索
  2. python实现逻辑回归的流程_逻辑回归原理及其python实现
  3. php和python和java-python和java,php,c,c#,c++的对比
  4. static 关键字作用
  5. 160个Crackme017
  6. 根据条件单元格的值改变单元格的显示色块和文字颜色等属性。
  7. 也玩有道难题的双立方数问题:Python 版解法
  8. 企业级 oracle11G r2 DataGuard 安装配置
  9. 10月数据库排行:Microsoft SQL Server分数增加最多
  10. Ubuntu16.4(64位)下gcc-linaro-arm-linux-gnueabihf交叉编译环境安装
  11. SPS2003升级到MOSS2007相关资料及问题总结
  12. PHP制作钱包银行金额数字展示功能实例
  13. 基础知识(四)Dijkstra算法
  14. Android之使用MediaMetadataRetriever类获取视频第一帧
  15. python3生成随机数_python3实现随机数
  16. 吴恩达神经网络和深度学习-学习笔记-32-卷积神经网络示例
  17. jquery mobile将页面内容当成弹框进行显示
  18. 设计模式入门-单例模式
  19. http2-协议协商过程
  20. 问卷调查的数据分析怎么做

热门文章

  1. oracle 关于归档的视图,10G中,什么视图可以看归档空间的大小
  2. php 检验类,php实现的简单检验登陆类
  3. java 输入框_Java文本框和文本区的输入输出
  4. Maven 仓库优先级
  5. java dataurl_FileReader生成图片dataurl的分析
  6. 手动选择显示_为什么考驾照的人多数选择C1而不是C2?老教练说出了真相....
  7. JavaWab项目1 ---- 技术架构
  8. nexus+7+android+5.0++wifi+代理,谷歌Nexus5吃上安卓8.0:除了WiFi全不能正常工作
  9. JAVA高性能内存队列-disruptor
  10. IDEA编译通过能打包,但是代码飘红