DSNIKESR

モジュールDSNIKESRは、使用するソート ルーチンの保存済みレコードからキーとデータをエンコードします。このモジュールでの処理は、物理データがキー値と共にソート ルーチンに渡されていることを示します。DSNIKESRは、データ マネージャー アドレス スペース内のデータ マネージャー コードの一部です。

ヒント

ソートは、マージ スキャン結合やハイブリッド結合の他、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を使用して、ネスト ループ結合の使用回数を増やすことができます。ユーザーが結果セット全体を検索しない場合のみ実行してください。

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

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

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

参考資料

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