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. 13 Python 函数进阶

    代码在运行伊始,创建的存储“变量名与值的关系”的空间叫做全局命名空间,在函数的运行中开辟的临时的空间叫做局部命名空间 命名空间和作用域 命名空间的本质:存放名字与值的绑定关系 >>> ...

  2. C. Jury Marks

    C. Jury Marks time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...

  3. T62

    Forgiveness is the fragrance that the violet sheds on the heel that has crushed it.你一脚踩在紫罗兰上,它却把香味留在 ...

  4. os.path

  5. jumpserver遇到的坑

    安装:https://github.com/jumpserver/jumpserver,看readme照着做就行,下面是遇到的坑.   0.4.4版坑: 1.要升级pip,否则有的包装不上   2.p ...

  6. python mysql 查询返回字典结构

    cur = self.conn.cursor(MySQLdb.cursors.DictCursor)加上MySQLdb.cursors.DictCursor可以返回字典结构 {列名:值} class ...

  7. 【转】Pro Android学习笔记(二四):用户界面和控制(12):Style和Theme

    目录(?)[-] 静态格式 代码中设定 Style Theme 静态格式 在res/values中设置静态的Style,在资源中设置静态Style可使用的HTML格式有<i> <u& ...

  8. unittest单元测试生成HTML测试报告

    前言: HTMLTestRunner 是 Python 标准库的 unittest 模块的一个扩展,它可以生成 HTML的 测试报告. 一.下载HTMLTestRunnerNew.py文件: 下载链接 ...

  9. 给JZ2440开发板重新分区

    转自:http://mp.weixin.qq.com/s?__biz=MzAxNTAyOTczMw==&mid=2649328035&idx=1&sn=7d3935cc05d3 ...

  10. Django框架之第三篇模板语法

    一.什么是模板? 只要是在html里面有模板语法就不是html文件了,这样的文件就叫做模板. 二.模板语法分类 一.模板语法之变量:语法为 {{ }}: 在 Django 模板中遍历复杂数据结构的关键 ...