DSNXSTM
モジュールDSNXSTMは、RDSソート記憶マネージャーです。このモジュールは、データ マネージャー アドレス スペースのRDS領域内のソート用記憶域を取得、管理、および解放します。メモリーのソート スペースは、ソートを実行する各ユーザー用に取得されます。または、スペースがRIDプールに追加されると取得されます。記憶域は、MVS Getmain命令を発行することによって取得されます。これらの機能は資源を大量に消費するため、回避する必要があります。回避するには、ソート要求を軽減または除去する、あるいはMINRBLKSなどのZPARMオプションを変更して基本のRIDプールを調整します。このモジュールは、データ マネージャー アドレス スペース内のコードの一部になります。
ヒント
ソートは、マージ スキャン結合やハイブリッド結合の他、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
· 列定義で指定された制限がある場合、希望する順序付きセットの作成に必要な列だけを指定します。たとえば、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を使用して、ネスト ループ結合の使用回数を増やすことができます。ただし、ユーザーが結果セット全体を検索しない場合のみ実行してください。
· 順序付けの文節にあるすべての列が索引に含まれる必要があるため、列を既存の索引に追加します。以下に例を示します。
SELECT A, B, C FROM TABLEX
WHERE COL1 = :HV
ORDER BY A, B, C
列Aと列Bだけが索引に含まれる場合、このステートメントはソートを回避するための索引を使用しません。
· ソートされる列の順序と一致する索引を追加します。
参考資料
『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)』