実行計画の各フィールドの各モジュールの説明
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.見積実行計画の各フィールドとモジュール
2、実際の実行計画の各フィールドとモジュール
三、まとめ 以上から分かるように、実行計画の異なる情報は異なる状況で入手でき、異なる情報は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文に対応する異なる状況を示しているので、具体的な状況に応じて具体的に分析すべきである.