`
womendu
  • 浏览: 1484098 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

执行计划中各字段各模块描述

 
阅读更多
在SQL语句的执行计划中,包含很多字段项和很多模块,其不同字段代表了不同的含义且在不同的情形下某些字段、模块显示或不显示,下
面的描述给出了执行计划中各字段的含义以及各模块的描述。
有关执行计划中各字段模块的描述请参考: 执行计划中各字段各模块描述
有关由SQL语句来获取执行计划请参考:使用EXPLAIN PLAN获取SQL语句执行计划
有关使用autotrace来获取执行计划请参考:启用AUTOTRACE功能
有关display_cursor函数的使用请参考:http://www.2cto.com/database/201202/120814.html

一、执行计划中各字段的描述
1、基本字段(总是可用的)
Id 执行计划中每一个操作(行)的标识符。如果数字前面带有星号,意味着将在随后提供这行包含的谓词信息
Operation 对应执行的操作。也叫行源操作
Name 操作的对象名称

2、查询优化器评估信息
Rows(E-Rows) 预估操作返回的记录条数
Bytes(E-Bytes) 预估操作返回的记录字节数
TempSpc 预估操作使用临时表空间的大小
Cost(%CPU) 预估操作所需的开销。在括号中列出了CPU开销的百分比。注意这些值是通过执行计划计算出来的。换句话说,父操作的开销包含子操作的开销
Time 预估执行操作所需要的时间(HH:MM:SS)

3、分区(仅当访问分区表时下列字段可见)
Pstart 访问的第一个分区。如果解析时不知道是哪个分区就设为KEY,KEY(I),KEY(MC),KEY(OR),KEY(SQ)
Pstop 访问的最后一个分区。如果解析时不知道是哪个分区就设为KEY,KEY(I),KEY(MC),KEY(OR),KEY(SQ)

4、并行和分布式处理(仅当使用并行或分布式操作时下列字段可见)
Inst 在分布式操作中,指操作使用的数据库链接的名字
TQ 在并行操作中,用于从属线程间通信的表队列
IN-OUT 并行或分布式操作间的关系
PQ Distrib 在并行操作中,生产者为发送数据给消费者进行的分配

5、运行时统计(当设定参数statistics_level为all或使用gather_plan_statistics提示时,下列字段可见)
Starts 指定操作执行的次数
A-Rows 操作返回的真实记录数
A-Time 操作执行的真实时间(HH:MM:SS.FF)

6、I/O 统计(当设定参数statistics_level为all或使用gather_plan_statistics提示时,下列字段可见)
Buffers 执行期间进行的逻辑读操作数量
Reads 执行期间进行的物理读操作数量
Writes 执行期间进行的物理写操作数量

7、内存使用统计
OMem 最优执行所需内存的预估值
1Mem 一次通过(one-pass)执行所需内存的预估值
0/1/M 最优/一次通过/多次通过(multipass)模式操作执行的次数
Used-Mem 最后一次执行时操作使用的内存量
Used-Tmp 最后一次执行时操作使用的临时空间大小。这个字段必须扩大1024倍才能和其他衡量内存的字段一致(比如,32k意味着32MB)
Max-Tmp 操作使用的最大临时空间大小。这个字段必须扩大1024倍才能和其他衡量内存的字段一致(比如,32k意味着32MB)
二、执行计划中各模块的描述与举例
1、预估的执行计划中的各字段与模块

SQL> explain plan for
2 select * from emp e,dept d
3 where e.deptno=d.deptno
4 and e.ename='SMITH';

Explained.


/**************************************************/
/* Author: Robinson Cheng */
/* Blog: http://blog.csdn.net/robinson_0612 */
/* MSN: robinson_0612@hotmail.com */
/* QQ: 645746311 */
/**************************************************/
SQL> set linesize 180
SQL> set pagesize 0
SQL> select * from table(dbms_xplan.display(null,null,'advanced')); --使用dbms_xplan.display函数获得语句的执行计划
Plan hash value: 351108634 --SQL语句的哈希植

---------------------------------------------------------------------------------------- /*执行计划部分*/
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
----------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 117 | 4 (0)| 00:00:01 |
| 1 | NESTED LOOPS | | 1 | 117 | 4 (0)| 00:00:01 |
|* 2 | TABLE ACCESS FULL | EMP | 1 | 87 | 3 (0)| 00:00:01 |
| 3 | TABLE ACCESS BY INDEX ROWID| DEPT | 1 | 30 | 1 (0)| 00:00:01 |
|* 4 | INDEX UNIQUE SCAN | PK_DEPT | 1 | | 0 (0)| 00:00:01 |
----------------------------------------------------------------------------------------

Query Block Name / Object Alias (identified by operation id): --这部分显示的为查询块名和对象别名
-------------------------------------------------------------

1 - SEL$1 --SEL$为select 的缩写,位于块1,相应的还有DEL$,INS$,UPD$等
2 - SEL$1 / E@SEL$1 --E@SEL$1,对应到执行计划中的操作ID为2上,即在表E上的查询,E为别名,下面类同
3 - SEL$1 / D@SEL$1
4 - SEL$1 / D@SEL$1

Outline Data --提纲部分,这部分将执行计划中的图形化方式以文本形式来呈现,即转换为提示符方式
-------------

/*+
BEGIN_OUTLINE_DATA
USE_NL(@"SEL$1" "D"@"SEL$1") --使用USE_NL提示,即嵌套循环
LEADING(@"SEL$1" "E"@"SEL$1" "D"@"SEL$1") --指明前导表
INDEX_RS_ASC(@"SEL$1" "D"@"SEL$1" ("DEPT"."DEPTNO")) --指明对于D上的访问方式为使用索引
FULL(@"SEL$1" "E"@"SEL$1") --指明对于E上的访问方式为全表扫描
OUTLINE_LEAF(@"SEL$1")
ALL_ROWS
OPTIMIZER_FEATURES_ENABLE('10.2.0.3')
IGNORE_OPTIM_EMBEDDED_HINTS
END_OUTLINE_DATA
*/

Predicate Information (identified by operation id): --谓词信息部分,在执行计划中ID带有星号的每一行均对应到下面中的一行
---------------------------------------------------

2 - filter("E"."ENAME"='SMITH')
4 - access("E"."DEPTNO"="D"."DEPTNO")

Column Projection Information (identified by operation id): --执行时每一步骤所返回的列,下面的不同步骤返回了不同的列
-----------------------------------------------------------

1 - (#keys=0) "E"."EMPNO"[NUMBER,22], "E"."ENAME"[VARCHAR2,10],
"E"."JOB"[VARCHAR2,9], "E"."MGR"[NUMBER,22], "E"."HIREDATE"[DATE,7],
"E"."SAL"[NUMBER,22], "E"."COMM"[NUMBER,22], "E"."DEPTNO"[NUMBER,22],
"D"."DEPTNO"[NUMBER,22], "D"."DNAME"[VARCHAR2,14], "D"."LOC"[VARCHAR2,13]
2 - "E"."EMPNO"[NUMBER,22], "E"."ENAME"[VARCHAR2,10], "E"."JOB"[VARCHAR2,9],
"E"."MGR"[NUMBER,22], "E"."HIREDATE"[DATE,7], "E"."SAL"[NUMBER,22],
"E"."COMM"[NUMBER,22], "E"."DEPTNO"[NUMBER,22]
3 - "D"."DEPTNO"[NUMBER,22], "D"."DNAME"[VARCHAR2,14], "D"."LOC"[VARCHAR2,13]
4 - "D".ROWID[ROWID,10], "D"."DEPTNO"[NUMBER,22]

Note --注释与描述部分,下面的描述中给出了本次SQL语句使用了动态采样功能
-----
- dynamic sampling used for this statement

58 rows selected.
2、实际执行计划中的各字段与模块

SQL> select /*+ gather_plan_statistics */ * --注意此处增加了提示gather_plan_statistics并且该语句被执行
2 from emp e,dept d
3 where e.deptno=d.deptno
4 and e.ename='SMITH';

7369 SMITH CLERK 7902 17-DEC-80 800 20 20 RESEARCH DALLAS

SQL> select * from table(dbms_xplan.display_cursor(null,null,'iostats last')); --使用display_cursor获取实际的执行计划

SQL_ID fpx7zw59f405d, child number 0 --这部分给出了SQL语句的SQL_ID,子游标号以及原始的SQL语句
-------------------------------------
select /*+ gather_plan_statistics */ * from emp e,dept d where e.deptno=d.deptno and
e.ename='SMITH'

Plan hash value: 351108634 --SQL 语句的哈希值
--SQL语句的执行计划,可以看到下面显示的字段一部分不同于预估执行计划中的字段
-----------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers | Reads |
-----------------------------------------------------------------------------------------------------------
| 1 | NESTED LOOPS | | 1 | 1 | 1 |00:00:00.01 | 10 | 1 |
|* 2 | TABLE ACCESS FULL | EMP | 1 | 1 | 1 |00:00:00.01 | 8 | 0 |
| 3 | TABLE ACCESS BY INDEX ROWID| DEPT | 1 | 1 | 1 |00:00:00.01 | 2 | 1 |
|* 4 | INDEX UNIQUE SCAN | PK_DEPT | 1 | 1 | 1 |00:00:00.01 | 1 | 1 |
-----------------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

2 - filter("E"."ENAME"='SMITH')
4 - access("E"."DEPTNO"="D"."DEPTNO")

Note
-----
- dynamic sampling used for this statement


26 rows selected.
三、总结
由上可知,在不同的情形下可以获得执行计划的不同信息,而不同信息则展现了SQL语句对应的不同情况,因此应根据具体的情形具体分析。

分享到:
评论

相关推荐

    C#开发典型模块大全

    4.2.5 如何获取数据表中字段的描述信息 83 4.3 设计过程 83 4.3.1 获取数据表中字段的中文信息 84 4.3.2 添加数据表的查询条件 86 4.3.3 向SQL语句中添加括号 89 4.3.4 查询生成后的SQL语句 90 4.3.5 ...

    C#开发典型模块大全(光盘)第二部分

    4.2.5 如何获取数据表中字段的描述信息 4.3 设计过程 4.3.1 获取数据表中字段的中文信息 4.3.2 添加数据表的查询条件 4.3.3 向SQL语句中添加括号 4.3.4 查询生成后的SQL语句 4.3.5 主程序获得接口信息 第5章 万能...

    C#开发典型模块大全(光盘)

    4.2.5 如何获取数据表中字段的描述信息 4.3 设计过程 4.3.1 获取数据表中字段的中文信息 4.3.2 添加数据表的查询条件 4.3.3 向SQL语句中添加括号 4.3.4 查询生成后的SQL语句 4.3.5 主程序获得接口信息 第5章 万能...

    ASP.NET2.0典型模块(17-22)

    ExcuteProc.aspx 执行存储过程的范例 ExcuteProcParm.aspx 执行带参数的存储过程的范例 ExcuteReader.aspx 执行返回DataReader类型的范例 ExcuteScalar.aspx 执行返回一个字段的范例 ...

    ASP.NET2.0典型模块(1-16)

    FCKEditorSample FCK编辑器的使用示例 FreeTextBoxSample FreeText编辑器的使用示例 SimpleEditor 自定义的简单在线编辑器模块 <br>第7章(\C07) 示例描述:本章示例展现了C#中的字符串操作。...

    C#开发典型模块大全(光盘)第一部分

    4.2.5 如何获取数据表中字段的描述信息 4.3 设计过程 4.3.1 获取数据表中字段的中文信息 4.3.2 添加数据表的查询条件 4.3.3 向SQL语句中添加括号 4.3.4 查询生成后的SQL语句 4.3.5 主程序获得接口信息 第5章 万能...

    package-browser-field-spec:package.json中“浏览器”字段的规范文档

    该字段位于package.json文件(描述)中,该文件通常位于项目源代码树的根目录下。 条款 以下是本文档其余部分中使用的常用术语。 服务器 这是一个非基于dom的javascript执行环境。 它通常仅包含基本的javascript...

    达梦数据库_SQL语言手册

    查看执行计划 第章数据的插入、删除和修改 数据插入语句 数据修改语句 数据删除语句 伪列的使用 和 自增列的使用 自增列定义 属性 第章视图 视图的作用 视图的定义 视图的删除 视图的查询 视图数据...

    软件需求规格说明书模板

    10 计划开始执行日期 原计划中的开始执行日期 显示项 文本 11 计划截止执行日期 原计划中的截止执行日期 显示项 文本 前置条件:无 后置条件:无 功能说明: 查询功能:查询已经制订的计划调整申请信息。查询...

    执法案件管理系统-数据库设计.docx

    字段名 名称采用中文名称的拼音缩写,字段名称必须用字母开头,字段中含有的字母必须是大写字母。 索引 由前缀和名称两部分组成,前缀是INDEX_,名称是表名+字段名,如果复合索引的构成字段较多,则只包含第一个字段...

    schemas:为基于架构的 JavaScript 对象提供验证和默认字段值

    遵循或文件中描述的编码约定(更多信息可以分别在和找到)。 为您的代码添加了测试。 通过了所有测试! 要执行所有测试,只需运行: $ npm test 贡献者 作者: 执照 这个模块是在MIT 许可下发布的。

    ABAP中文幫助文檔

     如果创建报表程序,则在“类型”字段中输入1,如果创建模块存储,则在“类型”字段中输入M。关于可能类型的列表,请单击可能条目箭头。  在“应用程序”字段中为应用程序输入分类字母,如财务会计输入F。  ...

    Primavera P6 PM参考手册中文版

    阅读第一章,了解 PM 流程,然后依次按照各章所述步骤建立项目及项目组件,设置分类码与文档,管理完成项目计划所需的资源,在工作展开过程中更新项目,并在整个项目周期内汇报结果。 本手册的编排如下所示: 第 1 ...

    计算机程序设计(C语言)课程设计报告.doc

    time结构体定义在dos.h文件中,可用来保存系统的当前时间,其中各字段的值的含 义如下。 1.unsigned char ti_min:保存分钟值。 2.unsigned char ti_hour:保存小时。 3.unsigned char ti_hund:保存百分之一秒,例如...

    GP-卡规范V2.1.1

    6.6.2. 应用/可执行装载文件/可执行模块的数据元素的描述 50 6.6.2.1. 应用/可执行装载文件/可执行模块的AID 50 6.6.2.2. 应用/可执行装载文件/可执行模块的生命周期 50 6.6.2.3. 资源分配 50 6.6.2.4. 应用的权限 ...

    redcap-em-shazam:Shazam外部模块

    这种方法的工作方式是在您要放置自定义表的表单上插入一个“描述性”字段。 接下来,设置外部模块并定义您的自定义HTML。 这是一个例子: < th> < th> 2012 < th> 2013 < th> 2014 </ th

    禅道项目管理软件开源版5.3正式版本

    565 用例详情和编辑中模块和用例模块显示不一致 566 火狐下面bug的自定义模板无法列出 567 页面右上角的快速跳转箭头不起作用了 568 解决undefinedtimedout的问题 569 编辑任务切换模块后,需求应当能保持之前的 570...

    pica-data-js:EcmaScript实用程序来处理PICA数据

    微微数据 ...函数picaFieldIdentifier从字段或从Avram字段计划生成字段标识符 使用权 函数getPPN提取记录的PPN 类PicaPath以使用PICA路径表达式 方法fieldIdentifier获取路径的字段标识符(标记和可选出

    show-simplex-cli:一个使用ASCII在您的终端中显示动画单工噪声字段的CLI

    在终端中显示动画ASCII字段的CLI。 您可能必须斜视一下或减小字体大小才能看到图案,但是它们在那里! :sparkle: 要运行这个CLI以更快的帧速率? 好吧,,所以您可以! npx执行 运行以下命令以执行show-simplex-...

    ZenTaoPMS.12.5.2.win64.zip

    3691 待办转任务时,待办的描述信息没有同步到任务中 3690 集成中做代码评审生成的Bug类型有误 3689 测试单下的用例模块显示问题 3688 批量编辑任务关闭时间没有更新 3687 编辑任务手动设置的关闭时间没有时分秒自动...

Global site tag (gtag.js) - Google Analytics