当社エンジニアによる書き下ろし技術レポート Close-Up IT

技術レポート 新着RSS(Atom)

この記事に関連するサービス
システム評価改善
この記事に関連するお問い合わせ
お問い合わせ

第2章 :DB2 for z/OSのアクセスパス管理機能に関するトピック

1オプティマイゼーション・ヒント機能

選択させたいアクセスパス情報をPLAN_TABLEに用意して、オプティマイザーにアクセスパスを指示する機能です。
これは、従来(V6)から提供されている機能で、ひと手間かける(アクセスパス情報をPLAN_TABLEに用意する)必要がありますが、REBINDによるアクセスパスの変化を回避するためには、比較的容易で有効な手段です。

オプティマイゼーション・ヒント機能の使用手順(静的SQL)

  1. DSNZPARMのOPTHINTSパラメーターにYESを指定する。
  2. 選択させたいアクセスパス情報をPLAN_TABLEに用意する。
    用意したアクセスパス情報のOPTHINT列にヒントIDを登録しておく。
  3. REBIND時に用意したアクセスパスを指定する。
    REBINDのOPTHINTオプションで用意したアクセスパス情報のヒントIDを指定する。

アクセスパス情報のPLAN_TABLEへの登録

PLAN_TABLEには、ユーザーが希望するアクセスパス情報を登録(INSERT)することができますが、有効なアクセスパス情報を設定するためには、アクセスパスおよびPLAN_TABLEに関する詳細な知識が必要になるため、現実的ではありません。

過去に取得された、稼動実績のある(良好なパフォーマンスが得られる)EXPLAIN情報を使用するのが簡単、確実で、推奨される方法です(*注)。

オプティマイゼーション・ヒントを使用する場合は、PLAN_TABLEに有効なEXPLAIN情報を保管しておくことが、重要なポイントになります(*注)。

*注
V10では、現在稼動中のパッケージのアクセスパス情報をPLAN_TABLEに 書き出す機能が追加されています(後述の「EXPLAINステートメント:PACKAGEオプション」参照)。したがって、V10以降では、(PLAN_TABLEにEXPLAIN情報が保管されていない場合でも)この機能を使用して、ヒントで使用するアクセスパス情報を登録することが可能です。

登録したアクセスパス情報の例

QUERYNO PROGNAME METHOD TNAME ACCESSNAME COLLID OPTHINT HINT_USED
1234 PROG01 0 TB100 TB100X02 COLL1    
1234 PROG01 1 TB200 TB200X01 COLL1    

PLAN_TABLEのOPTHINT列へのヒントIDの登録

下記のようなSQL UPDATEステートメントを使用して、登録したアクセスパス情報に任意のヒントIDを設定します。

UPDATE PLAN_TABLE
  SET OPTHINT = 'GOODPATH'
   WHERE
    QUERYNO = 1234 AND
    APPLNAME = ' ' AND
    PROGNAME = 'PROG01' AND
    VERSION = '' AND
    COLLID = 'COLL1'
;
QUERYNO PROGNAME  METHOD TNAME ACCESSNAME COLLID OPTHINT HINT_USED
1234 PROG01  0 TB100 TB100X02 COLL1 GOODPATH  
1234 PROG01 1 TB200 TB200X01 COLL1 GOODPATH  

オプティマイゼーション・ヒントの適用

REBIND時に、OPTHINTオプションで用意したアクセスパス情報のヒントIDを指定します。

REBIND PACKAGE(COLL1.PROG01) EXPLAIN(YES) OPTHINT('GOODPATH')

REBIND時にヒントが使用された場合は、REBINDによって新しく選択されたアクセスパス情報のHINT_USED列には、使用されたヒントのヒントIDが設定されます。

QUERYNO PROGNAME  METHOD TNAME ACCESSNAME COLLID OPTHINT HINT_USED
1234 PROG01  0 TB100 TB100X02 COLL1 GOODPATH  
1234 PROG01  1 TB200 TB200X01 COLL1 GOODPATH  
1234 PROG01  0 TB100 TB100X02 COLL1   GOODPATH
1234 PROG01  1 TB200 TB200X01 COLL1   GOODPATH

オプティマイゼーション・ヒント機能の使用に関する注意事項、考慮事項

  • ヒント指定でバインドされたPACKAGEは、以降のREBINDでは、明示的にOPTHINTオプションを指定しない場合でも、前回使用されたヒントが適用されます(REBIND処理では、前回のバインドで指定されたオプションが忠実に再現されるため)。
  • ヒントを使用しているPACKAGEに新しいアクセスパスを選択させたい場合は、REBIND時にOPTHINTオプションでブランクを指定します。( OPTHINT(' ') )
  • 動的SQLについてもヒントを使用することが可能です。PLAN_TABLEに選択させたいアクセスパス情報を用意するのは静的SQLの場合と同様ですが、動的SQLの場合は、BIND/REBIND時にアクセスパスが選択されるわけではありませんので、ヒントを使用するためには、SQLステートメントを変更する必要があります(SET CURRENT OPTIMIZATION HINT、およびQUEYNO指定の追加)。
  • よって、動的SQLでヒントを使用するためには、事前の計画と準備が必要になり、静的SQLの場合と比較すると使いづらい面があります。
  • また、PLAN_TABLEのサイズが大きい場合は、必ずINDEXを作成するようにして下さい。prefix.SDSNSAMP(DSNTESC)にINDEX定義のサンプルが提供されています。

このページの先頭へ