DSNIWKFD

モジュールDSNIWKFDは、一時作業ファイルまたはソート作業ファイルを削除します。またソート ルーチンで使用されたトークンを管理して、論理作業ファイルが不要になり削除できるようになるタイミングを判別します。一時作業ファイルを要求する関数によって物理入出力が発生します。これにより、経過時間が長くなりCPU使用量が増大します。

ヒント

モジュールDSNIWKFDは、大規模なソートとビューの作成に使用されます。ソートされるデータの容量が、メモリーのソート作業スペースとソート作業ファイル(DSN4Kxx)で使用されるバッファー プールのバッファーに適合しない場合は、一時作業ファイルが使用されます。ソートは、マージ スキャン結合やハイブリッド結合の他、ORDER BY、GROUP BY、およびUNIONのコーディングによっても発生します。PLAN_TABLEのSORTN列とSORTC列には、ソートの原因が表示されます。

EXPLAIN機能を使用してSQLを評価し、適切な索引がない場合はソートや結合を実行する必要がないようにします。

  • 重複する行が許容される場合は、UNIONをUNION ALLに置き換えます。UNION文節は、ソートを呼び出して分類し、重複する行を削除します。UNION ALLはソートを要求しません。

  • DISTINCTをGROUP BYと置き換えて、ソートを呼び出さずにDB2で重複する索引を使用できるようにします。DISTINCTが適用される列に固有索引が存在しない場合に、DISTINCT文節はソートを呼び出します。

  • すべてのローカル述部が索引付け可能な形式でコーディングされていることを確認します。『Db2 Application and Programming Guide』を参照してください。Db2は、これらの述部をソートの実行前に適用し、ソート作業ファイルのページ数を削減します。索引の最初の列が述部に含まれているか、索引の任意の列に同等の述部がある場合、ソートを回避するために索引が使用される場合があります。これらの述部は索引付け可能な形式である必要があります。

  • ソート順に近似したクラスター順で並べられているすべての既存の索引が、正しく保守されていることを確認します。Db2は、ソートを回避するために80%を超えるクラスター率の索引を使用します。

  • 順序付けの列と述部が、索引付けされた列と一致することを確認します。たとえば、ソートを回避するために使用されたTABLEXのDEPTにクラスター化索引が存在する場合でも、以下のステートメントはソートを使用します。

 

SELECT B.DEPT, B.DEPT_NAME

FROM TABLEX A, TABLEY B

WHERE A.DEPT = B.DEPT

ORDER BY B.DEPT

·   順序付けの文節にあるすべての列が索引に含まれる必要があるため、列を既存の索引に追加します。以下に例を示します。

SELECT A, B, C FROM TABLEX

WHERE COL1 = :HV

ORDER BY A, B, C

列Aと列Bだけが索引に含まれる場合、このステートメントはソートを回避するための索引を使用しません。

·   列定義で指定された制限がある場合、希望する順序付きセットの作成に必要な列だけを指定します。たとえば、DEPTに固有索引がある場合、以下の照会はソートを回避するための索引を使用しません。これは、ORDER BY文節に含まれる一部の列が索引に含まれないためです。

SELECT DEPT, DEPT_NAME

FROM DEPT_TABLE

ORDER BY DEPT, DEPT_NAME

1つの部門(DEPT)には1つの部門名(DEPT_NAME)しか存在しないため、DEPT_NAMEをORDER BY文節から除去すれば、ソートを回避するための索引を使用して希望する順序で結果セットが検索されます。

·   マージ スキャン結合およびハイブリッド結合の場合は、OPTIMIZE FOR n ROWSを使用して、ネスト ループ結合の使用回数を増やすことができます。ただし、ユーザーが結果セット全体を検索しない場合のみ実行してください。

·   ソートされる列の順序と一致する索引を追加します。

大量のソート処理を回避できない場合、作業ファイルに書き込まれた各行には、ソート文節で指定されたすべての列と、選択されたすべての列が含まれます。一部重複するため、必要な列のみをソートしてください。これらのキーが2回表示されることによってソート行のサイズが増えてしまうからです。VARCHAR列は最大長で作業ファイルに書き込まれるため、選択しないようにします。ソート行のサイズによって1ページに収まる数が決定するため、ソート行のサイズが大きいと入出力要求が増加します。

システム全体でのソートの効率は、作業ファイルのサイズと配置によって異なります。すべてのソート作業ファイルは、1つのバッファー プールと関連付けられます。Db2のカタログ表との競合を回避するために、BP0を使用しないようにします。これらの一時表をさまざまなボリュームに拡張し、入出力を複数のデバイスに分散させます。

参考資料

『IBM Db2 for OS/390, Messages and Codes(GC26-8979)』

『IBM Db2 for OS/390, Application Programming and SQL Guide(SC26-8958)』

『IBM Db2 for OS/390, Administration Guide(SC26-8957)』