文档章节

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

chapin
 chapin
发布于 2014/11/04 10:14
字数 1839
阅读 41
收藏 3
 在SQL语句的执行计划中,包含很多字段项和很多模块,其不同字段代表了不同的含义且在不同的情形下某些字段、模块显示或不显示,下
面的描述给出了执行计划中各字段的含义以及各模块的描述。

       有关执行计划中各字段模块的描述请参考: 执行计划中各字段各模块描述
       有关由SQL语句来获取执行计划请参考:     使用 EXPLAIN PLAN 获取SQL语句执行计划
       有关使用autotrace来获取执行计划请参考:启用 AUTOTRACE 功能
       有关display_cursor函数的使用请参考:      dbms_xplan之display_cursor函数的使用

一、执行计划中各字段的描述
  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] 
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语句对应的不同情况,因此应根据具体的情形具体分析。 

本文转载自:http://blog.csdn.net/leshami/article/details/6860007

chapin
粉丝 20
博文 86
码字总数 107071
作品 0
成都
程序员
私信 提问
testlink使用说明

前言 一登录 二初始设置设置用户产品 三测试需求管理 四测试计划管理 五测试用例管理 六测试用例集管理 七测试执行报告Bug 八测试结果分析 九易用性的功能 前言   测试管理工具,是指用工具...

老杨纪事
2016/08/28
0
0
TestLink1.9.13使用说明

前言   测试管理工具,是指用工具对软件的整个测试输入、执行过程和测试结果进行管理的过程。可以提高回归测试的效率、大幅提升测试时间、测试质量、用例复用、需求覆盖等。 TestLink用于进...

zhengyijie
2016/03/03
232
0
性能优化利器:数据库审核平台的选型与实践(附PPT)

本文根据韩锋老师在〖3月11日北京数据库技术沙龙〗现场演讲内容整理而成。点击文末链接还能下载PPT哦~ 演讲大纲: 今天我将从三个方面进行分享:首先我们看一下为什么我们想要开发这个平台,...

韩锋
2017/03/15
0
0
禅道项目管理软件 6.2.stable 版本发布!

禅道项目管理软件 6.2.stable 版本于8月27日正式发布。 该版本主要是细节方面的调整。 调整并优化了测试流程,修复Bug,提高系统安全性。 使用lazarus重构windows一键安装包的控制面板。 一、...

炒蚕豆吃蹦豆
2014/08/28
3.2K
8
Ansible管理任务计划、安装rpm包管理服务、 playbook的使用循环条件判断handles

Ansible管理任务计划 -m:模块 若要删除该cron 只需要加一个字段 state=absent 其他的时间表示:分钟 minute 小时 hour 日期 day 月份 month Ansible安装rpm包/管理服务 安装yum的时候报错:...

jiekegz
2018/07/10
0
0

没有更多内容

加载失败,请刷新页面

加载更多

RS-232、RS422和RS-485的区别和各自的实现方式

一、殊途同归 RS-232、RS422和RS-485 均属于UART是通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),仅用两根信号线(Rx 和Tx)就可以完成通信过程; 而由于各自使用的电...

rainbowcode
30分钟前
0
0
spring 本类中方法调用另外一个方法事务不生效

1、在spring配置文件中添加 <aop:aspectj-autoproxy expose-proxy="true" proxy-target-class="true" />声明自动代理 <!-- 标识通过aop框架暴露该代理,aopContext能够访问. --> proxy-targe......

重城重楼
36分钟前
5
0
项目 banner 乱弹

------------------------------------------ 村上春树 ------------------------------------- 如果我爱你,而你也正巧爱我,你头发乱了的时候,我会笑笑地替你拨一拨,然后手还留恋地在你...

宿小帅
48分钟前
3
0
PHP获取未来七天的日期和星期

php获取未来七天的日期和星期代码 第一步:获取需要天数的日期,然后调用函数 //获取未来七天的日期 for($i=1;$i<8;$i++){ $dateArray[$i]=date('Y-m-d',strtotime(d...

一只懒猫-
59分钟前
2
0
总结:IO模型

分类 多路复用 参考文章: https://www.jianshu.com/p/6a6845464770 https://www.cnblogs.com/zingp/p/6863170.html https://blog.csdn.net/sehanlingfeng/article/details/78920423......

浮躁的码农
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部