`
womendu
  • 浏览: 1513580 次
  • 性别: 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语句对应的不同情况,因此应根据具体的情形具体分析。

分享到:
评论

相关推荐

    易语言数据库检查重复字段模块源码

    5. 用户界面:虽然描述中没有提及,但通常这类工具会有用户界面,以便用户交互,如显示检查结果、确认是否继续录入等。 6. 性能优化:对于大量数据,检查过程需要考虑性能问题,可能采用批量处理、索引利用等方法...

    F-02 抬头显示系统隐藏字段 卡号

    标题与描述解析:“F-02 抬头显示系统隐藏字段 卡号”与“F-02系统字段,卡号让其显示出来作为其他用途”这两句话共同指向了一个核心议题,即在SAP F-02事务处理系统中,如何使原本隐藏的卡号字段在抬头显示中可见,...

    SAP系统PM模块设备管理后台表关联表图,非常详细

    再者,"工作订单"(IW21, IW22, IW23等)是PM模块中实际维护活动的载体,它包含了维护工作的详细描述、开始结束时间、成本估计等。工作订单与"服务头项"(VBEP, VBFA等)关联,记录了与维护相关的费用和供应商信息。...

    易语言ACCESS组合查询模块源码,易语言ACCESS组合查询模块使用例

    在给定的标题和描述中,我们关注的是“ACCESS组合查询模块”及其在易语言中的实现。这个模块主要用于处理基于Microsoft Access数据库的多条件查询,它允许用户根据多个字段和比较符来筛选数据,以获取满足特定条件的...

    TestDirector8.0的数据库字段名和字段中英文对照.pdf

    TestDirector 8.0 是一款强大的测试管理工具,它的数据库包含了大量的字段,用于记录和管理测试过程中的各种信息。以下是一些主要字段的详细解释: 1. **DEFECT** - 缺陷模块: - `BG_ACTUAL_FIX_TIME`:缺陷修复...

    sap 分配字段COPY交货单号

    按照描述中的步骤进行操作: 1. 使用事务码CMOD(Change Document)进入增强编辑环境,这是SAP提供的一个用于开发和修改标准程序的工具。 2. 输入SDVFX004,这是一个特定的增强点,可能与交货单的处理有关。 3. ...

    模块设计说明书模板

    描述中提到该模板用于“实际开发过程”,强调其实用性和参考价值,适用于学习和实践场景。 ### 标签解析 标签“模块设计说明书”进一步明确了文档的主题和类别,方便在文档管理和检索时快速定位。 ### 部分内容...

    对mdb中字段批量汇总统计

    根据描述,这里的数据是自动生成且字段中数据是随机的,可能需要事先创建这些数据或确保数据库已经填充了适当的数据。 3. **字段遍历**:对每个字段进行批量统计,我们需要遍历所有字段。可以使用循环结构,如`对于...

    SAP各模块常用TABLE.xls

    描述中的"博文链接:https://harry-2013.iteye.com/blog/800022"虽然没有提供具体的内容,但可以推测这可能是一个IT专业人员分享的博客文章,其中可能详细解释了SAP表格的使用和理解,或者提供了与SAP模块相关的其他...

    Open Academy-新建模块及基础视图等代码

    在描述中提到的"测试代码",是指编写好的、用于验证模块功能正确性的代码。在Odoo中,单元测试和集成测试是确保代码质量的重要手段。开发者会编写测试用例,这些用例覆盖了模块的主要功能,以检查代码是否按预期工作...

    Maximo 系统功能模块关系说明

    综合关系图展示了Maximo系统中各个模块之间的相互关系,这些关系覆盖了从资产的初始计划到最终处理的整个生命周期。 #### 第三章 功能关系详细描述 **第一节 资产与其他功能的关系** 资产模块是Maximo系统的核心...

    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 ...

    TestDirector字段名

    ### TestDirector 字段名...以上是 TestDirector 中各个模块的关键字段解析,这些字段对于有效管理和追踪测试过程至关重要。通过对这些字段的理解和合理使用,可以提高测试效率和质量,确保软件产品的可靠性和稳定性。

    PS(项目管理)模块后台配置 PS

    PS模块是项目管理的核心模块,负责项目管理的所有方面,包括项目计划、项目执行、项目监控和项目关闭。 Activate project management in controlling area OKKP 在控制区域OKKP中激活项目管理,需要设置项目管理的...

    Clementine外部模块接口

    - **EXECUTE子部分**:描述了模块执行的逻辑和流程,包括如何处理输入数据和产生输出。 - **OPTIONS子部分**:定义了模块的配置选项,如运行时的行为和设置。 - **CONTROLS子部分**:涵盖了用户界面元素,如基本...

    PB通用查询模块,有参考价值

    在描述中提到的“通用查询模块”,通常是为了提高开发效率和代码复用性,将常见的查询功能封装成一个独立的模块。这个模块设计的目标是适应各种不同的数据库查询需求,无论是简单的单表查询还是复杂的多表联查,都...

    phpcms2008模块制作教程

    - **编写配置文件**:定义模块的基本信息,如模块名、描述、是否启用等。 - **编写模型文件**:实现数据操作,包括添加、修改、删除、查询等功能。 - **编写控制器文件**:处理用户的请求,调用模型中的方法并...

    用友软件打印专题讲解(包括全部模块及版本)

    - **问题描述**:用户在销售管理模块中遇到的打印问题。 - **解决方案**: - 检查销售单据数据是否完整准确。 - 调整打印模板,确保所有字段都能被正确打印。 ##### 库存管理模块打印问题 - **问题描述**:用户在...

    SAP CO模块信息系统配置

    第四,用户需要选择和生成特征(Tcode: OKQ3),该特征可以生成对应的字段,用户可以选择全部或者选择分析报表所需的字段,然后执行“生成特性”。特征是LIS的特征和关键指标,它们都是数据仓库产品中的重要组成部分...

    vtiger模块开发说明书(英文)

    #### 六、执行模块创建脚本 - **第29页**:指导如何运行脚本以实际创建模块。 #### 七、创建模块文件(前端) - **第30页**:讲解如何在前端界面上实现模块的各种功能。 ##### 7.1 语言文件准备 - **第31页**:...

Global site tag (gtag.js) - Google Analytics