執行計劃中各字段各模塊描述

 在SQL語句的執行計劃中,包含不少字段項和不少模塊,其不一樣字段表明了不一樣的含義且在不一樣的情形下某些字段、模塊顯示或不顯示,下
面的描述給出了執行計劃中各字段的含義以及各模塊的描述。

       有關執行計劃中各字段模塊的描述請參考: 執行計劃中各字段各模塊描述
       有關由SQL語句來獲取執行計劃請參考:     使用 EXPLAIN PLAN 獲取SQL語句執行計劃
       有關使用autotrace來獲取執行計劃請參考:啓用 AUTOTRACE 功能
       有關display_cursor函數的使用請參考:      dbms_xplan之display_cursor函數的使用 ios

1、執行計劃中各字段的描述
  一、基本字段(老是可用的)
        Id              執行計劃中每個操做(行)的標識符。若是數字前面帶有星號,意味着將在隨後提供這行包含的謂詞信息
        Operation  對應執行的操做。也叫行源操做
        Name        操做的對象名稱
  
  二、查詢優化器評估信息
        Rows(E-Rows)    預估操做返回的記錄條數
        Bytes(E-Bytes)    預估操做返回的記錄字節數
        TempSpc            預估操做使用臨時表空間的大小
        Cost(%CPU)        預估操做所需的開銷。在括號中列出了CPU開銷的百分比。注意這些值是經過執行計劃計算出來的。換句話說,父操做的開銷包含子操做的開銷
        Time                   預估執行操做所須要的時間(HH:MM:SS)
  
  三、分區(僅當訪問分區表時下列字段可見)
    Pstart        訪問的第一個分區。若是解析時不知道是哪一個分區就設爲KEY,KEY(I),KEY(MC),KEY(OR),KEY(SQ)
    Pstop        訪問的最後一個分區。若是解析時不知道是哪一個分區就設爲KEY,KEY(I),KEY(MC),KEY(OR),KEY(SQ)
  
  四、並行和分佈式處理(僅當使用並行或分佈式操做時下列字段可見)
        Inst        在分佈式操做中,指操做使用的數據庫連接的名字
        TQ         在並行操做中,用於從屬線程間通訊的表隊列
        IN-OUT          並行或分佈式操做間的關係
        PQ Distrib     在並行操做中,生產者爲發送數據給消費者進行的分配
  
  五、運行時統計(當設定參數statistics_level爲all或使用gather_plan_statistics提示時,下列字段可見)
        Starts         指定操做執行的次數
        A-Rows     操做返回的真實記錄數
        A-Time      操做執行的真實時間(HH:MM:SS.FF)
  
  六、I/O 統計(當設定參數statistics_level爲all或使用gather_plan_statistics提示時,下列字段可見)
        Buffers     執行期間進行的邏輯讀操做數量
        Reads      執行期間進行的物理讀操做數量
        Writes      執行期間進行的物理寫操做數量        
  
  七、內存使用統計
        OMem        最優執行所需內存的預估值
        1Mem         一次經過(one-pass)執行所需內存的預估值
        0/1/M          最優/一次經過/屢次經過(multipass)模式操做執行的次數
        Used-Mem       最後一次執行時操做使用的內存量
        Used-Tmp        最後一次執行時操做使用的臨時空間大小。這個字段必須擴大1024倍才能和其餘衡量內存的字段一致(好比,32k意味着32MB)
        Max-Tmp           操做使用的最大臨時空間大小。這個字段必須擴大1024倍才能和其餘衡量內存的字段一致(好比,32k意味着32MB) sql

2、執行計劃中各模塊的描述與舉例
  一、預估的執行計劃中的各字段與模塊  數據庫

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

  二、實際執行計劃中的各字段與模塊                                                                                                    分佈式

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.

3、總結
      由上可知,在不一樣的情形下能夠得到執行計劃的不一樣信息,而不一樣信息則展示了SQL語句對應的不一樣狀況,所以應根據具體的情形具體分析。  ide

相關文章
相關標籤/搜索