照会並列処理の解釈

プラン表データを調べて、並列処理を利用するアクセス・パスを Db2 が選択するかどうかを判別することができます。

このタスクについて

プログラム固有のプログラミングインターフェース情報の開始。

Db2が並列処理を選択する可能性を理解するには、PLAN_TABLE出力を調べてください。 この情報は、 並列処理について PLAN_TABLE 列を調べる方法を記述し、いくつかの例を提供します。

プログラム固有のプログラミングインターフェース情報を終了します。

プロシージャー

並列処理の場合の EXPLAIN 出力を解釈するには、次のようにします。

  1. Db2 が並列処理を選択する可能性を判断する:
    照会 (QUERYNO) 内の各照会ブロック (QBLOCKNO) ごとに、ACCESS_DEGREE または JOIN_DEGREE 内 の非 NULL 値が、ある度合いの並列処理が計画されていることを示しています。
  2. 照会の並列グループを識別する:

    ACCESS_PGROUP_ID、JOIN_PGROUP_ID、SORTN_PGROUP_ID、または SORTC_PGROUP_ID に ついて、同じ値を持つステップ (PLANNO) はすべて、一連の操作が同じ並列グループ であることを示しています。 通常、一連の操作には、種々のタイプの 結合方式やソート操作が関係しています。 実行される操作によって、 並列グループ ID が PLAN_TABLE 出力の同じ行、または別の行に現れます。

  3. 並列処理モードを識別する:
    PARALLELISM_MODE 列は、計画されている並列処理のタイプを示します。

以下の例では、並列処理を表すいくつかの PLAN_TABLE 値について説明しています。

単一表アクセス
Db2がバインド時に、表T1からデータを取得するために3つの並行要求を開始すると想定します。 PLAN_TABLE の一部は、次の表に示すとおり です。 Db2がステップに対して並列操作を使用しないことを決定した場合は、ACCESS_DEGREEおよびACCESS_PGROUP_IDにNULL値が含まれています。
表 1. 単一表アクセスの PLAN_TABLE の一部
TNAME METHOD
ACCESS_
DEGREE
ACCESS_
PGROUP_
ID
JOIN_
DEGREE
JOIN_
PGROUP_
ID
SORTC_
PGROUP_
ID
SORTN_
PGROUP_
ID
T1 0 3 1 (null) (null) (null) (null)
ネスト・ループ結合
照会によって、3 つの表 (T1、T2 および T3) が関係した、 一連のネスト・ループ結合ができたとします。 T1 は最外部の表で、T3 は最も内部の表です。 Db2 バインド時に、3つのテーブルからデータを取得するために3つの同時リクエストを開始することを決定します。 各要求は、T1 の一部および T2 と T3 のすべてにアクセスします。 ソート付きネスト・ループ結合方法の場合、ACCESSTYPE=T (疎索引) との スター型結合の場合を除いて、検索はすべて同一の並列グループに あります。 PLAN_TABLE の一部は、次の表に示すとおり です。
表 2. ネスト・ループ結合の PLAN_TABLE の一部
TNAME METHOD
ACCESS_
DEGREE
ACCESS_
PGROUP_
ID
JOIN_
DEGREE
JOIN_
PGROUP_
ID
SORTC_
PGROUP_
ID
SORTN_
PGROUP_
ID
T1 0 3 1 (null) (null) (null) (null)
T2 1 3 1 3 1 (null) (null)
T3 1 3 1 3 1 (null) (null)
マージ・スキャン結合
照会によって、2 つの表 (T1 および T2) のマージ・スキャン結合ができたとします。 Db2 バインド時に、 に対して3つの同時リクエスト、 に対して6つの同時リクエストを開始することを決定します。 T1 T2 T1 のスキャンとソートはある 1 つの並列グループで行われ、 T2 のスキャン とソートは別の並列グループで行われます。 また、マージ・フェーズは並列に実行できる可能性が あります。 この場合、3 番目の並列グループを使用して、ソートされたそれぞれの中間表に対して 3 つの 並行要求を開始します。 PLAN_TABLE の一部は、次の表に示すとおり です。
表 3. マージ・スキャン結合の PLAN_TABLE の一部
TNAME METHOD
ACCESS_
DEGREE
ACCESS_
PGROUP_
ID
JOIN_
DEGREE
JOIN_
PGROUP_
ID
SORTC_
PGROUP_
ID
SORTN_
PGROUP_
ID
T1 0 3 d (null) (null) d (null)
T2 2 6 2 3 3 d d
マルチテーブルの結合では、 Db2 は並列タスクで複数のテーブルを含む複合型のソートを実行する場合もあります。 Db2 コストベースモデルを使用して、すべてのケースで並列ソートを使用するかどうかを決定します。 Db2が並列ソートの使用を決定すると、SORTC_PGROUP_IDとSORTN_PGROUP_IDは、並列グループIDを示します。 T1、T2、および T3 の 3 つの表を結合する照会を考え、T1 と T2 間の マージ・スキャン結合、次にその T1 と T2 の複合と T3 間のマージ・スキャン結合を使用し ます。 Db2がコスト・モデルに基づいて、この照会内のすべてのソートを並列に実行することを決定した場合は、PLAN_TABLEの一部が以下の表に示されているように表示されます。
表 4. 複数表の、マージ・スキャン結合に対する PLAN_TABLE 一部
TNAME METHOD
ACCESS_
DEGREE
ACCESS_
PGROUP_
ID
JOIN_
DEGREE
JOIN_
PGROUP_
ID
SORTC_
PGROUP_
ID
SORTN_
PGROUP_
ID
T1 0 3 1 (null) (null) (null) (null)
T2 2 6 2 6 3 1 2
T3 2 6 4 6 5 3 4
ハイブリッド結合

照会によって、2 つの表 (T1 および T2) のハイブリッド結合ができたとします。 さらに、T1 はソートする必要があり、結果として PLAN_TABLE の T2 行は SORTC_JOIN=Y になります。 Db2 バインド時に、 に対して3つの同時リクエスト、 に対して6つの同時リクエストを開始することを決定します。 T1 T2 T2 のクラスター索引を使った結合には、並列操作が使用されます。

クラスター索引上に並行要求を開始して T2 RID を取り出し可能なため、 結合フェーズは並列的に実行するステップになり ます。 T2 RID と T2 行の検索結果は、同一の並列グループに入れられ ます。 PLAN_TABLE の一部は、次の表に示すとおり です。
表 5. ハイブリッド結合の PLAN_TABLE の一部
TNAME METHOD
ACCESS_
DEGREE
ACCESS_
PGROUP_
ID
JOIN_
DEGREE
JOIN_
PGROUP_
ID
SORTC_
PGROUP_
ID
SORTN_
PGROUP_
ID
T1 0 3 1 (null) (null) (null) (null)
T2 4 6 2 6 2 1 (null)