実行計画の各フィールドの各モジュールの説明

16781 ワード

SQL文の実行計画には、多くのフィールド項目と多くのモジュールが含まれており、その異なるフィールドは異なる意味を表し、異なる場合にはいくつかのフィールド、モジュールが表示または非表示になります.以下の説明では、実行計画の各フィールドの意味と各モジュールの説明を示します.
       実行計画の各フィールドモジュールの説明については、「実行計画の各フィールドの各モジュールの説明」を参照してください.       SQL文による実行計画の取得については、次の参照を参照してください.     EXPLAIN PLANを使用したSQL文実行プランの取得       Autotraceを使用して実行計画を取得する方法については、「AUTOTRACE機能の有効化」を参照してください.       ディスプレイについて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倍に拡大する必要があります(たとえば、32 kは32 MBを意味します).        Max-Tmp           操作で使用する最大一時領域サイズ.このフィールドは、メモリを測定する他のフィールドと一致するように1024倍に拡大する必要があります(たとえば、32 kは32 MBを意味します).
二、実行計画における各モジュールの説明と例  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:    [email protected]              */                                                                   
/* 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文に対応する異なる状況を示しているので、具体的な状況に応じて具体的に分析すべきである.