DBMS_XPLAN包包括一系列函数,主要是用于显示SQL语句的执行计划,且不同的情形下使用不同的函数来显示,如预估的执行计划则使用

display函数,而实际的执行计划则是用display_cursor函数,对于awr中的执行计划,则是用display_awr函数,而SQL tuning集合中的执行计划

则由display_sqlset来完成(来自Leshami的dbms_xplan之display函数的使用)。

函数语法:

DBMS_XPLAN.DISPLAY(

table_name    IN  VARCHAR2  DEFAULT 'PLAN_TABLE',

statement_id  IN  VARCHAR2  DEFAULT  NULL,

format        IN  VARCHAR2  DEFAULT  'TYPICAL',

filter_preds  IN  VARCHAR2 DEFAULT NULL);

display函数的参数说明

table_name

指定计划表的名字,缺省值为 'PLAN_TABLE'.

statement_id

SQL语句的ID号,是在生成执行计划时使用set statement_id名令设定的值,默认值为NULL,当使用默认值时,将显示最近

插入计划表中的执行计划(filter_preds参数的值为空时)

format

用于控制display函数输出的内容。其常用取值为basic,typical,serial,all,advanced。其中typical为缺省值

除了上述几个取值外,还可以配合一些额外的修饰符来显示不同的内容。如:

alias、bytes、cost、note、outline、parallel、paration、predicate等

常用取值组合修饰符的例子:

basic +predicate、basic +outline(需要某个修饰符使用"+"号来连接)

typical -bytes、typical +alias -bytes -cost(不需要某个修饰符使用"-"号来连接)

注:"+"号与"-"号前面应保留空格

filter_preds

过滤谓词。用于过滤从plan_table表中返回的记录。当该值为NULL时,执行计划显示最近插入计划表中的执行计划。

如:filter_preds=>'plan_id = 223'

format参数常用值描述

basic     仅仅显示最少的信息。基本上包括操作和操作的对象

typical   显示大部分信息。基本上包括除了别名,提纲和字段投影外的所有信息,此为缺省值。

serial    类似于typical,但不显示并行操作

all          显示除提纲之外的所有信息

advanced     显示所有信息

format参数修饰符

alias        控制包含查询块与别名的显示部分

bytes        控制执行计划表中字段bytes的显示

cost         控制执行计划表中字段cost的显示

note         控制包含注释信息的显示部分

outline      控制包含提纲信息的显示部分

parallel     控制包含并行处理信息的提示

partition    控制并行处理信息的显示,尤其是执行计划表中字段TQ、IN-OUT、PQ Distrib的显示

peeked_binds 控制包含绑定变量窥探部分的显示。仅当生成执行计划时使用了绑定变量是可见

predicate    控制包含谓词filter和access显示部分

projection   控制包含投影信息的显示部分

remote       控制远程执行的SQL语句的显示

rows         控制执行计划表中字段rows的显示

使用演示:

SQL> EXPLAIN PLAN SET STATEMENT_ID='test' FOR SELECT * FROM   emp e, dept d WHERE  e.deptno = d.deptno AND    e.ename  = 'CLARK';

Explained.

SQL> SELECT *   FROM   TABLE(DBMS_XPLAN.DISPLAY('PLAN_TABLE','test','BASIC'));

PLAN_TABLE_OUTPUT

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Plan hash value: 3625962092

------------------------------------------------

| Id  | Operation                  | Name    |

------------------------------------------------

|   0 | SELECT STATEMENT        |            |

|   1 |  NESTED LOOPS                       |            |

|   2 |   NESTED LOOPS                     |            |

|   3 |    TABLE ACCESS FULL          | EMP     |

|   4 |    INDEX UNIQUE SCAN       | PK_DEPT |

|   5 |   TABLE ACCESS BY INDEX ROWID| DEPT    |

PLAN_TABLE_OUTPUT

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

------------------------------------------------

12 rows selected.

SQL> SELECT *   FROM   TABLE(DBMS_XPLAN.DISPLAY('PLAN_TABLE','test','BASIC+predicate'));

PLAN_TABLE_OUTPUT

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Error: format 'BASIC+predicate' not valid for DBMS_XPLAN.DISPLAY()

SQL> SELECT *   FROM   TABLE(DBMS_XPLAN.DISPLAY('PLAN_TABLE','test','BASIC +predicate'));

PLAN_TABLE_OUTPUT

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Plan hash value: 3625962092

------------------------------------------------

| Id  | Operation                  | Name    |

------------------------------------------------

|   0 | SELECT STATEMENT        |            |

|   1 |  NESTED LOOPS                       |            |

|   2 |   NESTED LOOPS                     |            |

|*  3 |    TABLE ACCESS FULL          | EMP     |

|*  4 |    INDEX UNIQUE SCAN       | PK_DEPT |

|   5 |   TABLE ACCESS BY INDEX ROWID| DEPT    |

PLAN_TABLE_OUTPUT

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

------------------------------------------------

Predicate Information (identified by operation id):

---------------------------------------------------

3 - filter("E"."ENAME"='CLARK')

4 - access("E"."DEPTNO"="D"."DEPTNO")

18 rows selected.

SQL> SELECT *   FROM   TABLE(DBMS_XPLAN.DISPLAY('PLAN_TABLE','test','typical'));

PLAN_TABLE_OUTPUT

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Plan hash value: 3625962092

----------------------------------------------------------------------------------------

| Id  | Operation                  | Name    | Rows  | Bytes | Cost (%CPU)| Time     |

----------------------------------------------------------------------------------------

|   0 | SELECT STATEMENT        |            |     1 |    58 |     4        (0)| 00:00:01 |

|   1 |  NESTED LOOPS                       |            |       |       |     |              |

|   2 |   NESTED LOOPS                     |            |     1 |    58 |     4        (0)| 00:00:01 |

|*  3 |    TABLE ACCESS FULL          | EMP     |     1 |    38 |     3        (0)| 00:00:01 |

|*  4 |    INDEX UNIQUE SCAN       | PK_DEPT |     1 |       |     0         (0)| 00:00:01 |

|   5 |   TABLE ACCESS BY INDEX ROWID| DEPT    |     1 |    20 |     1    (0)| 00:00:01 |

PLAN_TABLE_OUTPUT

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------

Predicate Information (identified by operation id):

---------------------------------------------------

3 - filter("E"."ENAME"='CLARK')

4 - access("E"."DEPTNO"="D"."DEPTNO")

18 rows selected.

SQL> select * from table(dbms_xplan.display(null,null,'','id=1'));  --添加了过滤条件

PLAN_TABLE_OUTPUT

--------------------------------------------------------------------------------

Plan hash value: 3625962092

------------------------------

| Id  | Operation     | Name |

------------------------------

|   1 |  NESTED LOOPS |      |

------------------------------

Note

-----

- rule based optimizer used (consider using cbo)

11 rows selected.

总结

1、display函数仅仅针对预估的执行计划,而不是实际的执行计划

2、display函数显示了预估的执行计划且显示格式灵活,可以以不同的输出格式呈现

3、当所有参数为null的情况下,显示执行计划表中(缺省为plan_table)最后一条语句的执行计划

4、尽管可以通过SQL语句查询plan_table来获取执行计划,建议直接使用display函数,这足够说明一切问题

5、当SQL语句中使用了绑定变量时,由explain plan获得的执行计划是不可靠的

dbms_xplan的display查看执行计划的更多相关文章

  1. dbms_xplan的display_cursor查看执行计划

    准备工作: SQL> conn sys/root as sysdba Connected. SQL> grant select on v_$sql_plan to scott; Grant ...

  2. Oracle数据库查看执行计划

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

  3. oracle如何查看执行计划

    1.在PL/SQL Developer中得到一个SQL的执行计划 输入想要查看执行计划的目标SQL,再按一下快捷键F5就可以了.2.explain plan 命令 explain plan for + ...

  4. oralce 查看执行计划

    SQL的执行计划实际代表了目标SQL在Oracle数据库内部的具体执行步骤,作为调优,只有知道了优化器选择的执行计划是否为当前情形下最优的执行计划,才能够知道下一步往什么方向. 执行计划的定义:执行目 ...

  5. ORACLE数据库查看执行计划的方法

    一.什么是执行计划(explain plan) 执行计划:一条查询语句在ORACLE中的执行过程或访问路径的描述. 二.如何查看执行计划 1: 在PL/SQL下按F5查看执行计划.第三方工具toad等 ...

  6. oracle执行计划(二)----如何查看执行计划

    目录: (一)六种执行计划  (1)explain plan for  (2)set autotrace on  (3)statistics_level=all  (4)dbms_xplan.disp ...

  7. oracle查看执行计划以及使用场景

    文档结构: oracle执行计划使用场景 环境: Centos 6.10 Oracle 18.3.0.0.0 c 11g默认启动了自动统计信息收集的任务,默认运行时间是周一到周五晚上10点和周6,周天 ...

  8. 案例:使用dbms_xplan.display_cursor无法获取执行计划

    案例:使用dbms_xplan.display_cursor无法获取执行计划 环境:RHEL 6.5 + Oracle 11.2.0.4 在一次测试中发现使用dbms_xplan.display_cu ...

  9. Mysql查看执行计划-explain

    最近生产环境有一些查询较慢,需要优化,于是先进行业务确认查询条件是否可以优化,不行再进行sql优化,于是学习了下Mysql查看执行计划. 语法 explain <sql语句>  例如: e ...

随机推荐

  1. 宽度显示banner

    今天解决了一个以前解决不了的问题,所以就想找博客园记录一些笔记. ……以前也遇到过这种满屏banner不知道怎么做的问题,问老师老师也说不出个所以然,百度搜了好几条 也不太满意... 所以就开始尝试摸 ...

  2. 2017-2018-1 20179215《Linux内核原理与分析》第七周作业

    一.实验部分:分析Linux内核创建一个新进程的过程. [第一部分] 根据要求完成第一部分,步骤如下: 1. 首先进入虚拟机,打开终端,这命令行依次敲入以下命令: cd LinuxKernel    ...

  3. 用NodeJS打造多人在线聊天室(NodeJS & SocketIO & Express & EJS & MongoDB & Gulp)

    项目背景 这个项目主要是为了玩玩NodeJS,项目的方向大概是做出类似QQ的在线聊天系统.想要在线体验可以点击在线演示. 项目使用PM2进行部署和管理,功能在不断的迭代开发中.如果你觉得这个项目比较有 ...

  4. Poj 1860 Currency Exchange(Bellman-Ford,SPFA解单源最短路径问题)

    一.题意 有多个货币交易点,每个只能互换两种货币,兑换的汇率不同,并收取相应的手续费.有N种货币,假定你拥有第S中,数量为V,有M个兑换点.问你能不能通过兑换操作使你最后拥有的S币比起始的时候多. 二 ...

  5. HDOJ2553(2N皇后问题)

    N皇后问题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  6. jquery 中post 、get的同步问题,从外部获取返回数据

    解决方法1: 在全局设置: $.ajaxSetup({ async : false }); $.ajaxSetup({ async : false }); 然后再使用post或get方法 $.get( ...

  7. mount总结

    挂载分区 mount基本语法 mount [参数] /dev/sdb1(需要挂载的分区) /sdb1(挂载目录) 参数是可选的,也可以不带参数,参数的使用方法(-o ro,sync,atime). 参 ...

  8. Mac 远程连接Linux服务器及上传、下载命令

    1.使用ssh命令连接远程服务器主机 1.不设置端口,默认就是22 ssh root@192.168.18.129 1.1.设置端口例: ssh -p 22 root@192.168.18.1292. ...

  9. k8s 基础 pod操作

    创建hell world pod #vim hello-world-pod.yaml apiVersion: v1 kind: Pod metadata: name: hello-world spec ...

  10. 推荐!Html5精品效果源码分享

    一直在看别人的汇总,看到了一些不错的关于 HTML5内容的源码,我也汇总下分享出来,好东西需要共享!希望可以帮到需要的朋友. 1.劲爆分享:HTML5动感的火焰燃烧动画特效 这又是一款基于HTML5的 ...