目录

一、简介

二、示例

三、dbms_xplan.display_cursor返回列参数详解

四、参考资料


一、简介

DBMS_XPLAN是Oracle提供的一个用于查看SQL计划,包括执行计划和解释计划的包.DBMS_XPLAN包给出了更加简化的获取和显示计划的方式。 DBMS_XPLAN包不仅可以获取解释计划,还可以用来输出存储在AWR、SQL调试集、缓存的SQL游标,以及SQL基线中的语句计划。下面将重点讨论关于DBMS_XPLAN包在解释计划和执行计划上的应用。

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

//登录oracle
sqlplus / as sysdba
//查看执行计划
explain plan for select * from scott.emp;
select * from table(dbms_xplan.display);

上例中使用了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:参数用于控制包含在输出中的信息类型;

除了以上的基本的四种输出格式外,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类型,并且可以累积。

二、示例

【a】使用display_cursor方法查看最近一条语句的执行计划

//收集运行时的统计信息,包括行数,一直读取次数,物理读次数,物理写次数以及运算在一行数据上耗费的运行时间,如果没有指定该参数,就不会有A-Rows,A-Time,Buffers这三列信息
select /*+ gather_plan_statistics */ count(*) from scott.emp;//将sql_id和child_number设置成null,表示获取上一条执行语句的执行计划
select * from table(dbms_xplan.display_cursor(null,null,'ALLSTATS LAST'));

执行过程如下图所示:

【b】获取某条指定语句的执行计划

//执行一个简单查询
select count(*) from scott.emp where sal between 100 and 3000;//收集运行时的统计信息
select /*+ gather_plan_statistics */ count(*) from scott.emp where sal between 100 and 3000;//通过v$sql视图查询到sql语句的SQL_ID和CHILD_NUMBER(注意,必须要确保要查询的sql语句还在shared pool中)
select sql_id,child_number,sql_text from v$sql where sql_text like '%select /*+ gather_plan_statistics */ count(*)%';//查看该语句执行时的实现执行计划,将上一步查询出来的sql_id作为传递进去
select * from table(dbms_xplan.display_cursor('d86dz1fjtn7g7',0,'ALLSTATS LAST'));

执行过程如下图所示:

详细的执行过程参考如下:


SQL> select count(*) from scott.emp where sal between 100 and 3000;COUNT(*)
----------13SQL> select /*+ gather_plan_statistics */ count(*) from scott.emp where sal between 100 and 3000;COUNT(*)
----------13SQL> select sql_id,child_number,sql_text from v$sql where sql_text like '%select /*+ gather_plan_statistics */ count(*)%';SQL_ID        CHILD_NUMBER
------------- ------------
SQL_TEXT
--------------------------------------------------------------------------------
d86dz1fjtn7g7            0
select /*+ gather_plan_statistics */ count(*) from scott.emp where sal between 1
00 and 300094m52fnv9j1u1            0select /*+ gather_plan_statistics */ count(*) from scott.empb66kdapyrka0z            0
select sql_id,child_number,sql_text from v$sql where sql_text like '%select /*+SQL_ID        CHILD_NUMBER
------------- ------------
SQL_TEXT
--------------------------------------------------------------------------------
gather_plan_statistics */ count(*)%'SQL> select * from table(dbms_xplan.display_cursor(' d86dz1fjtn7g7',0,'ALLSTATS LAST'));PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
SQL_ID:  d86dz1fjtn7g7, child number: 0 cannot be foundSQL> select * from table(dbms_xplan.display_cursor('d86dz1fjtn7g7',0,'ALLSTATS LAST'));PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
SQL_ID  d86dz1fjtn7g7, child number 0
-------------------------------------
select /*+ gather_plan_statistics */ count(*) from scott.emp where sal
between 100 and 3000Plan hash value: 2083865914--------------------------------------------------------------------------------
-----| Id  | Operation          | Name | Starts | E-Rows | A-Rows |   A-Time   | BuffPLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
ers |--------------------------------------------------------------------------------
-----|   0 | SELECT STATEMENT   |      |      1 |        |      1 |00:00:00.01 |7 ||   1 |  SORT AGGREGATE    |      |      1 |      1 |      1 |00:00:00.01 |7 |PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
|*  2 |   TABLE ACCESS FULL| EMP  |      1 |     13 |     13 |00:00:00.01 |7 |--------------------------------------------------------------------------------
-----Predicate Information (identified by operation id):
---------------------------------------------------2 - filter(("SAL"<=3000 AND "SAL">=100))PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------已选择20行。SQL>

三、dbms_xplan.display_cursor返回列参数详解

dbms_xplan.display_cursor返回的列参数说明:

  • Id:步骤序号,如果前面有*,表示这一步会根据某一个过滤条件过滤数据;
  • Operation:执行的操作,比如索引扫描,选择数据,表连接等等;
  • Name:操作的对象;
  • Starts:对应的动作执行的次数;
  • E-Rows:优化器估算这一步返回的数据行数(每次执行的估计);
  • A-Rows:这一步实际返回的数据行数,实际值是累积计数;例如E-Rows = 15并且A-Rows = 225是完全合理的,因为第5行开始了15次:所以225实际行= 15开始*每次启动估计有15行.
  • A-Time:实际耗费的时间;
  • Buffers:实际的逻辑IO数量,这里是累计值,包括子操作的值;

四、参考资料

https://blog.csdn.net/liqfyiyi/article/details/7421242

https://www.cnblogs.com/princessd8251/articles/3537457.html

http://blog.itpub.net/31401608/viewspace-2148824/

https://www.cnblogs.com/tracy/archive/2010/04/16/1713272.html

http://www.mamicode.com/info-detail-2327550.html

Oracle中使用DBMS_XPLAN查看执行计划的方法相关推荐

  1. oracle 执行计划 ppt,oracle查看执行计划的方法

    查看执行计划的方法 Explain Plan For SQL 不实际执行SQL语句,生成的计划未必是真实执行的计划 必须要有plan_table SQLPLUS AUTOTRACE 除set auto ...

  2. Oracle授权普通用户查看执行计划

    利用不同的方法查看执行计划有对应不同的授权方法. 一. explain plan与dbms_xplan.display 最常用的方法,plsqldev的F5对应也是这个.这个命令会产生执行计划,并把执 ...

  3. Mysql中的explain查看执行计划

    Mysql中的explain查看执行计划 1.explain是什么? 查看执行计划. 2.怎么使用? explain + sql语句. 3.执行计划包含的信息: id,select_type,tabl ...

  4. dbms中怎么跨数据源拷贝数据_Oracle中使用DBMS_XPLAN处理执行计划详解

    概述 DBMS_XPLAN是Oracle提供的一个用于查看SQL计划,包括执行计划和解释计划的包:在以前查看SQL执行计划的时候,我都是直接使用set autotrace命令,不过DBMS_XPLAN ...

  5. Oracle进阶篇之查看执行计划

    目录 一.查看执行计划的方式 1.1.设置autotrace 1.2.使用第三方工具 1.3.EXPLAIN PLAN FOR 二.清除SGA缓存 三.分析执行计划 3.1.创建测试表 3.2.查看执 ...

  6. 授权普通非DBA用户可以有权限查看执行计划的方法

    drop table PLAN_TABLE; 删除原plan表 执行ORACLE自带的创建脚本 @?/rdbms/admin/utlxplan.sql 创建同义词 create or replace  ...

  7. oracle执行计划time单位,Oracle中查看执行计划

    方法一.通过使用工具PLSQL Developer中的Explain Plan Window窗口查看SQL执行计划.具体参考 方法二.通过SQL*PLUS中的autotrace命令查看 1.登录拥有d ...

  8. ORACLE数据库查看执行计划

    基于ORACLE的应用系统很多性能问题,是由应用系统SQL性能低劣引起的,所以,SQL的性能优化很重要,分析与优化SQL的性能我们一般通过查看该SQL的执行计划,本文就如何看懂执行计划,以及如何通过分 ...

  9. Oracle查看执行计划的几种方法

    Oracle查看执行计划的几种方法 一般来说,有如下几种获取执行计划的方式: 1.AUTOTRACE方式 AUTOTRACE是Oracle自带的客户端工具SQL*Plus的一个特性.启用AUTOTRA ...

  10. oracle如何查看执行计划

    1.直接使用sqlplus系统参数:       SQL> set autotrace on explain     SQL> select * from dual;     D     ...

最新文章

  1. 学习BeetlSQL总结(2)——查询API,更新API
  2. 高性能WEB开发(6) - web性能测试工具推荐
  3. C/C++得到系统启动项
  4. math.h头文件中声明了常用的一些数学运算
  5. eds800变频器故障代码_干货|三菱变频器故障剖析,及严重故障和轻微故障判断技巧!...
  6. Centos启用rz/sz命令
  7. SQL Server数据库培训实战视频教程(2天速成版)
  8. 新手入门3D游戏建模一定要搞懂的流程!
  9. 近岸蛋白通过注册:预计9个月营收2.3亿 同比降幅超15%
  10. 游戏首选高性能台式机显示器,240hz的刷新率够吗?
  11. java工厂方法模式记录日志_java工厂方法模式
  12. 阿里云RPA(机器人流程自动化)干货系列之五:业务流程梳理方法
  13. 简述计算机组装的具体流程,简述计算机的组装流程??
  14. 迁移学习---TrAdaBoost算法介绍
  15. Request和response的用法总结
  16. android 监听图库变化,Android ContentObserver 监听图库变化
  17. 金立金刚GN5001刷机救黑砖
  18. 教你搭建个人/企业私有云盘-seafile
  19. day24/MyIE.java
  20. LWIP (1.1) ETH Module以太网模块

热门文章

  1. 翻译: 4.2. 从零开始实现多层感知器MLP pytorch
  2. 无约束优化问题的相关讨论
  3. 服务器webpack构建性能,webpack性能优化——构建效率(一)
  4. android8.0 苹果,外媒:看完Android8.0 这次是谷歌抄苹果
  5. 380.常数时间插入、删除和获取随机元素
  6. 330.按要求补齐数组
  7. 184.部门工资最高的员工
  8. sigmoid激活函数
  9. leetcode 868. Binary Gap
  10. 凸优化第七章统计估计 7.5实验设计