通过查询语句显示计划

通过查询语句从这些视图里面读出执行计划并作格式化输出的方法都非常相似,我们这里以

sql_plan 为例给出示例。

通过包 DBMS_XPLAN 显示计划

这个包可以根据我们选择的函数以及输入的参数来格式化显示相关的执行计划,在我们随后的 内容中,主要会使用(也推荐读者使用)该工具显示执行计划。

DBMS_XPLAN 含有 4 个函数用于格式化的执行计划的输出,display、display_cursor、

display_awr 和 display_sqlset,分别用于显示 Explain Plan 命令解释的计划、内存中的执行计划、

AWR 历史数据中的计划已经 SQL 优化集中语句的计划(关于 SQL 优化集,我们会在后面章节中具体介绍)。它们都是管道化表函数(Pipelined Table Function),返回的结果是一个系统自定的集合数据类型 dbms_xplan_type_table。我们可以通过表函数(Table)进行映射后进行查询。

DISPLAY

DISPLAY 函数用于显示存储在 PLAN_TABLE 或和 PLAN_TABLE 拥有相同结构的表中的执行计划。此外,如果从视图 v$sql_plan_statistics_all 可以获得该执行计划的相关统计数据,DISPLAY 也可以格式化输出这些数据。

参数描述:

oTABLE_NAME:存储查询计划的表名(不区分大小写),默认值为 PLAN_TABLE;

oSTATEMENT_ID:SQL 语句 ID。在 PLAN_TABLE 中,每条语句的执行计划都会有一个唯一的

ID 来标识。这个 ID 可以在执行 Explain Plat 命令时,通过 Set Statement_id 子句来指定。如果输入为 NULL,则会获取最近一条被解释的语句。

oFORMAT:输出格式。在 DISPLAY 函数中,有三种预定义的格式(模版)可供选择。

‘BASIC’:基本格式。输出的内容最少,仅仅输出查询计划中每个操作的 ID、名称和选项以及操作的对象名;

‘TYPICAL’:典型格式。输出的内容是我们进行语句调优的大多数情况下所需要的信息。 除了基本格式中的内容外,还会输出优化器估算出的每个操作的记录行数、字节数、代价和时间,以及相关的提示信息(如远程 SQL、优化器建议等),同时,如果存在谓词(Predicate)条件,还会输出每个操作中的过滤(Filter)条件和访问(Access)条 件。此外,如果查询涉及到分区表,还会输出分区裁剪信息;如果查询涉及到并行查询,还会输出并行操作的相关信息(如表队列信息、并行查询分布方式等)。这种格式是默认格式;

‘SERIAL’:串行执行格式。这种格式和典型格式的输出内容基本一致,不同之处在于, 对并行查询,它不会输出相关的并行内容。

‘ALL’:完全格式。输出的内容相对完整。除了典型格式的内容以外,还会输出字段投 射信息和别名信息。

除了这预定义的格式模版外,用户还可以通过在格式化字符串中添加或者屏蔽一些关键词进行细化输出。每一个细化选项代表了输出内容中的单个信息(可能是执行计划表中 的一个列,也可能是一个附加信息)。DISPLAY 函数中,以下细化控制选项可供选择。

ROWS:优化器估算出的记录行数;

BYTES:优化器估算出的字节数;

COST:优化器估算出的代价;

PARTITION:分区裁剪信息;

PARALLEL:并行查询信息;

PREDICATE:谓词信息;

PROJECTION:字段投影信息;

ALIAS:别名信息;

REMOTE:分布式查询信息;

NOTE:相关注释信息。

细化控制选项和预定格式模版一起使用。例如,如果你希望输出基本格式内容,并输出优化器估算出的记录行数,可以以’BASIC ROWS’作为格式字符串;而如果希望输出典型格式,但不要其中的谓词条件,则可以输入’TYPICAL -PREDICATION’作为格式字符串,即在希望被屏蔽信息的对应控制选项前加上’-’。

oFILTER_PREDS:该参数接收合法的谓词过滤条件(可以是谓词逻辑表达式,也可以包含子 查询),以过滤从查询计划表中读取的内容。例如,可以输入’COST > 10’以限制输出所有估算代价大于 10 的操作。

示例:

DISPLAY_CURSOR

DISPLAY_CURSOR 函数可以显示内存中一个或者多个游标的执行计划。同样,可以通过输入参数限定 SQL、游标以及输出格式。

用户必须有对视图 VSQLV、SQL_PLAN 和 VSQL_PLAN_STATISTICS_ALL 的 SELECT 权限才能正常调用 DISPLAY_CURSOR 函数。

参数描述:

oSQL_ID:需要被显示执行计划的 SQL 语句的 ID。该 ID 可以从 VSQL.SQL_ID、

VSESSION.SQL_ID 或者 VSESSION.PREV_SQL_ID 获得。如果没有指定 SQL_ID(指定 NULL), 则默认会显示当前会话中最后一条被执行的 SQL 语句。

oCURSOR_CHILD_NO:语句的子游标序号。我们知道,收到执行环境的影响,一条 SQL 语句可能会产生多个版本的子游标,每个子游标都会与一个执行计划相映射(多个子游标也可

能映射同一个执行计划)。通过 CURSOR_CHILD_NO 可以限制仅显示某一个子游标的执行计划。如果不指定,则会显示该语句的所有子游标的执行计划。

oFORMAT:格式化控制字符串。DISPLAY 函数的格式化控制字符串的所有选项都适用于

DISPLAY_CURSOR 函数。由于运行语句还可以通过提示 GATHER_PLAN_STATISTICS 或设置系统参数 STATISTICS_LEVEL 为”ALL”来收集语句运行的性能统计数据,因此在细化选项中还有而外的选项选择是否输出这些数据。

IOSTATS:是否输出计划的输入输出(IO)统计数据;

MEMSTATS:在启用了 PGA 自动管理(参数 pga_aggregate_target 的值大于 0)的情况下,是否输出计划的输入内存统计数据(操作的内存使用量、内存读次数等);

ALLSTATS:包含了 IOSTATS 和 MEMSTATS 的全部内容。

LAST:以上三个选项输出的统计数据都是实际产生的数据,而非估算数据,它们是该游标所有执行所产生的数据的总和。你可以增加 LAST 选项以限定仅显示最后一次运行的统计数据。

此外,还有一些未公布的选项可用于该函数的输出控制。首先是预定义格式。。

‘ADVANCED’:高级格式。高级格式除了会输出完全格式中的所有内容外,还会视情况 输出绑定变量窥视信息和计划纲要(Outline)信息。

同样,细化参数中也有一些未公布的选项。

OUTLINE:是否以提示(HINT)的方式显示计划纲要;

PEEKED_BINDS:是否显示绑定变量窥视信息;

BUFFSTATS:是否显示内存内存读次数(包括一致性读和当前读次数),该信息为

IOSTATS 的一部分;

PLAN_HASH:是否显示计划的哈希值,该选项同样适用于 DISPLAY 函数。

示例:

oracle试图执行计划,Oracle SQL优化与调优之显示执行计划(上)相关推荐

  1. 《Oracle高性能SQL引擎剖析:SQL优化与调优机制详解》一第一篇 执行计划

    第一篇 执行计划 执行计划是指示Oracle如何获取和过滤数据.产生最终结果集,是影响SQL语句执行性能的关键因素.我们在深入了解执行计划之前,首先需要知道执行计划是在什么时候产生的,以及如何让SQL ...

  2. oracle层级计算推演,(特价书)Oracle 高性能SQL引擎剖析:SQL优化与调优机制详解(资深Oracle专家黄玮十年磨一剑,盖国强作序力荐)(china-pub首发)...

    第一篇 执 行 计 划 执行计划是指示Oracle如何获取和过滤数据.产生最终结果集,是影响SQL语句执行性能的关键因素.我们在深入了解执行计划之前,首先需要知道执行计划是在什么时候产生的,以及如何让 ...

  3. 《Oracle高性能SQL引擎剖析:SQL优化与调优机制详解》一1.1 生成执行计划

    1.1 生成执行计划 在Oracle中,任何一条语句在解析过程中都会生成一个唯一的数值标识,即SQL_ID.而同一条语句,在解析过程中,可能会因为执行环境的改变(例如某些优化参数被改变)而生成多个版本 ...

  4. 《Oracle高性能SQL引擎剖析:SQL优化与调优机制详解》一2.3 执行计划各个列的含义...

    2.3 执行计划各个列的含义 在执行计划中,除了ID.Operation和Name之外,还有其他一些列.这些列的数据是根据需要从PLAN_TABLE.V$SQL_PLAN.V$SQL_PLAN_STA ...

  5. 《Oracle高性能SQL引擎剖析:SQL优化与调优机制详解》一2.2 内部函数与操作

    2.2 内部函数与操作 实际上,在Oracle内部,执行计划的每一个数据源(Row Source)操作都与一个内部函数(qer<*>)相对应,而操作对象.谓词条件都是这些函数的参数.这些函 ...

  6. 每日一题(易错)丨Oracle SQL优化与调优技术

    墨墨导读:本文出自墨天轮"每日一练"专栏,此专栏已连更91天,欢迎关注https://www.modb.pro/topic/26446(复制到浏览器中打开或者点击"阅读原 ...

  7. mysql sql优化与调优机制详解_MySQL之SQL优化详解(一)

    目录 序言: 在我面试很多人的过程中,很多人谈到SQL优化都头头是道,建索引,explain分析,like全模糊会导致索引失效 云云,于是我问道:优化之前,需要找出数据库中比如超过2s的慢SQL,你是 ...

  8. SQL Server性能调优之执行计划深度剖析 第二节 执行计划第一次实践

    SQL Server性能调优之执行计划深度剖析 第二节 执行计划第一次实践 前言:自从上一篇文章发出之后,收到了很朋友的关注.很多朋友要求多多实践,而不是纯粹的理论.确实,从打算出这个系列开始,我就本 ...

  9. SQL Server 性能调优3 之索引(Index)的维护

    SQL Server 性能调优3 之索引(Index)的维护 热度1 评论 16 作者:溪溪水草 SQL Server 性能调优3 之索引(Index)的维护 前言 前一篇的文章介绍了通过建立索引来提 ...

最新文章

  1. 如何在柱状图中点连线_练瑜伽,如何放松僵硬紧张的髂腰肌?
  2. 图像去模糊之初探--Single Image Motion Deblurring
  3. PHP对Json字符串解码返回NULL的一般解决方案
  4. Python3安装(Linux)
  5. bzoj1601 灌水
  6. struts2的动态方法调用(DMI)和通配符映射
  7. N皇后问题(暴力法、回溯法)
  8. 我的ActiveRecord学习之路(一)
  9. Property工具类,Properties文件工具类,PropertiesUtils工具类
  10. 4.DTD - 元素 - 属性
  11. 图神经网络入门:GCN论文+源码超级详细注释讲解!
  12. java mp3剪切_mp3剪切器如何剪切mp3音频文件
  13. php洗车分销系统_全国首个PHP宝塔IDC分销系统
  14. 给定两个字符串 s 和 t,它们只包含小写字母。 字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。 请找出在 t 中被添加的字母
  15. 数学三次危机(四)第一次数学危机
  16. (二)Java线程与系统线程,生命周期
  17. Sunday 算法-JavaScript实现
  18. 上周技术关注:疯狂的社会性应用开发平台-NING
  19. 计算机无法建立word文档,(电脑中右键不能新建word和excel文档怎么办)为何电脑无法新建excle...
  20. OpenLayers-基于OpenLayers的地图应用中图标汉化

热门文章

  1. 使用Keras框架进行单变量时间序列预测——以上证指数为例
  2. LeetCode-94. 二叉树的中序遍历
  3. jQuery学习之三---工具
  4. 最新版MySQL操作---语句规范
  5. zeromq不需要消息服务器,ZeroMQ发布订阅TCP丢弃消息订阅服务器失败
  6. c语言中浮点数如何声明,C语言中浮点数定义和文本处理的配合
  7. java stric_Java中的strictfp关键字
  8. php 实现二叉树的最大深度_LeetCode题记——104二叉树的最大深度
  9. python怎么识别log函数_python中对数函数怎么表示
  10. linux环境 jenkins +allure生成测试报告