IBM Support

[D2] ロック・イベント・モニターの設定方法

Question & Answer


Question

バージョン 9.7 以降のロック・イベント・モニターの設定方法について教えてください。

Answer

Db2 9.7 以降、新しいロック・イベント・モニター (CREATE EVENT MONITOR FOR LOCKING) を使用して、ロック・イベント・レポートを収集できます。
このイベント・データを使用してロック待機、ロック・タイムアウト、およびデッドロック問題を識別できます。

Db2 9.7 より前のバージョンデッドロックおよびロックタイムアウトイベントをモニターするには、DB2DETAILDEADLOCK イベント・モニター、DB2_CAPTURE_LOCKTIMEOUT レジストリー変数、および CREATE EVENT MONITOR FOR DEADLOCKS ステートメントが使用されていましたが、V9.7 以降これらの手法はすべて推奨されなくなりました。

ロック・イベント・モニターの設定方法
データベースごとに 1 つのロック・イベント・モニターを作成します。

ロック・イベントを収集するため、以下のいずれかを設定します。
  1. ロック・イベントに関するデータベース構成パラメーターの設定
  2. ワークロード単位 (CREATE/ALTER WORKLOAD) で取得したいロック・イベントを設定

どちらの設定にするかは、お客様の要件に合わせて選択してください。

<< 実行手順 >>
  1. 既存のデッドロック・イベント・モニター DB2DETAILDEADLOCK の除去
    1-1. 該当のデータベースに接続し、既存のデッドロック・イベント・モニターが存在することを確認します。
    出力例:
    $ db2 connect to SAMPLE
    
       データベース接続情報
    
     データベース・サーバー           = DB2/AIX64 11.5.8
     SQL 許可 ID              = DB2INST1
     ローカル・データベース別名        = SAMPLE
    
    $ db2 "select substr(EVMONNAME,1,20) as EVMONNAME, TARGET_TYPE,substr(TARGET,1,20) as TARGET from syscat.eventmonitors"
    
    EVMONNAME            TARGET_TYPE TARGET
    -------------------- ----------- --------------------
    DB2DETAILDEADLOCK    F           db2detaildeadlock
    
      1 レコードが選択されました。

    1-2. 既存のデッドロック・イベント・モニターの非活動化と削除後、削除されたことを確認します。
    出力例:
    $ db2 "set event monitor db2detaildeadlock state 0"
    DB20000I  SQL コマンドが正常に完了しました。
    $ db2 "drop event monitor db2detaildeadlock"
    DB20000I  SQL コマンドが正常に完了しました。
    $ db2 "select substr(EVMONNAME,1,20) as EVMONNAME, TARGET_TYPE,substr(TARGET,1,20) as TARGET from syscat.eventmonitors"
    
    EVMONNAME            TARGET_TYPE TARGET
    -------------------- ----------- --------------------
    
      0 レコードが選択されました。
  2. イベント・モニターの作成、活動化
    2-1. イベント・モニターを定義します。
    CREATE EVENT MONITOR FOR LOCKING ステートメントを使用してロック・イベント・モニターを作成する必要があります。このモニターの名前と、ロック・イベント・データが書き込まれる未フォーマット・イベント表の名前を入力します。
    以下の例では、lockevmon というロック・イベント・モニターを作成します。
    $ db2 create event monitor lockevmon for locking write to unformatted event table
    DB20000I  SQL コマンドが正常に完了しました。

    2-2. イベント・モニターが活動化されていることを確認します。
    ロック・イベント・モニター lockevmon が活動化されていることを確認します。
    $ db2 "SELECT EVMONNAME,
           CASE
             WHEN EVENT_MON_STATE(EVMONNAME) = 0 THEN 'Inactive'
             WHEN EVENT_MON_STATE(EVMONNAME) = 1 THEN 'Active'
           END
           FROM SYSCAT.EVENTMONITORS"
    
    EVMONNAME                     2
    ----------------------------- --------
    LOCKEVMON                     Active
    
      1 レコードが選択されました。
    もし 'Inactive' となっている場合は、以下のコマンドで有効化します。
    $ db2 set event monitor lockevmon state 1
    DB20000I  SQL コマンドが正常に完了しました。
  3. イベント・モニターの設定
    3-1. ロック・イベント・モニターを収集するためには、ロック・イベント・データをキャプチャーするイベントの種類を、データベース単位、もしくはワークロード単位で設定します。
    データベース単位の場合、設定したデータベース上の全ての処理をモニターします。問題となる処理が特定されている場合は、ワークロード単位でモニターするレベルを指定できます。
    1. データベース・レベル
      データベース構成パラメーターの設定を設定することで、データをデータベース・レベルで収集し、すべての Db2 ワークロードに影響を与えます。動的に設定を変更するには、データベース接続が必要です。

      ロック待機イベントの場合
      SAMPLE データベースの mon_lockwait データベース構成パラメーターに HIST_AND_VALUES を設定、mon_lw_thresh データベース構成パラメーターに 10 秒を設定するには、以下のステートメントを発行します。
      db2 connect to sample
      db2 update db cfg using mon_lockwait hist_and_values
      db2 update db cfg using mon_lw_thresh 10000000
      ロック・タイムアウト・イベントの場合
      SAMPLE データベースの mon_locktimeout データベース構成パラメーターに HIST_AND_VALUES を設定するには、以下のコマンドを発行します。
      db2 connect to sample
      db2 update db cfg using mon_locktimeout hist_and_values
      デッドロック・イベントの場合
      SAMPLE データベースの mon_deadlock データベース構成パラメーターに HIST_AND_VALUES を設定するには、以下のコマンドを発行します。
      db2 connet to sample
      db2 update db cfg using mon_deadlock hist_and_values
    2. ワークロード・レベル
      ※ (Db2 11.1 まで) ワークロード管理をするためには、Db2 Enterprise Server Edition の有償フィーチャー (IBM Db2 Performance Optimization Feature for Enterprise Server Edition、もしくは Db2 Advanced Enterprise Server Edition) が必要です。
      Db2 のエディションごとのフィーチャーおよび機能

      新しいワークロードを作成するには、CREATE WORKLOAD ステートメントを使用します。
      例: アプリケーション (Application Name:db2bp) からサブミットされた要求を、finance という名前のワークロードに関連づけます。
      $ db2 "CREATE WORKLOAD finance APPLNAME ('db2bp')"
      DB20000I  SQL コマンドが正常に完了しました。
      ALTER WORKLOAD ステートメントの COLLECT 節で、どのデータを収集するかを指定します。COLLECT LOCK TIMEOUT DATA、COLLECT DEADLOCK DATA、または COLLECT LOCK WAIT DATA のいずれかです。COLLECT 節で WITH HISTORY オプションを指定すると、ロック・イベントのすべてのタイプに対して、現行の作業単位で過去のアクティビティー履歴を集めます。

      ロック待機イベントの場合
      FINANCE ワークロードで 5 秒経過後に獲得されたロックのロック待機データを収集するには、以下のコマンドを発行します。
      db2 ALTER WORKLOAD finance COLLECT LOCK WAIT DATA WITH HISTORY AND VALUES FOR LOCKS WAITING MORE THAN 5 SECONDS
      ロック・タイムアウト・イベントの場合
      FINANCE アプリケーションのロック・タイムアウト・データを収集するには、以下のコマンドを発行します。
      db2 ALTER WORKLOAD finance COLLECT LOCK TIMEOUT DATA WITH HISTORY
      デッドロック・イベントの場合
      FINANCE アプリケーションのデータを収集するには、以下のコマンドを発行します。
      db2 ALTER WORKLOAD finance COLLECT DEADLOCK DATA WITH HISTORY
  4. 未フォーマット・イベント表の情報取得
    以下のいずれかの方法で、ロック・イベント・レポートを取得します。 取得したレポートを分析し、ロック・イベントに関する問題の理由を判別して、問題を解決します。
    1. XML パーサー・ツール db2evmonfmt を使用して、フラット・テキスト・レポートを生成します。
      java db2evmonfmt -d <db_name> -ue <table_name> -ftext -u <userid> -p <password>
    2. EVMON_FORMAT_UE_TO_XML 表関数を使用して、XML 文書を取得します。
    3. EVMON_FORMAT_UE_TO_TABLES プロシージャーを使用して、データをリレーショナル表に出力します。
       
  5. イベント・モニターの停止
    ロック・イベント・モニターを非活動化します。
    $ db2 set event monitor lockevmon state 0
    DB20000I The SQL command completed successfully.
    もしくは、データベース構成パラメーターを再設定するか、ALTER WORKLOAD ステートメントを発行して、ロック・データ収集をオフにします。
    1. データベース・レベル
      ※ 動的にデータベース構成パラメーターの設定を変更するには、データベース接続が必要です。

      ロック待機イベントの場合
      SAMPLE データベースの mon_lockwait データベース構成パラメーターをデフォルトの NONE 入力データ値を指定して再設定し、mon_lw_thresh データベース構成パラメーターを再設定してデフォルト値の 5 秒に戻すには、以下のコマンドを発行します。
      db2 connect to sample
      db2 update db cfg using mon_lockwait none
      db2 update db cfg using mon_lw_thresh 5000000
      ロック・タイムアウト・イベントの場合
      SAMPLE データベースの mon_locktimeout データベース構成パラメーターをデフォルトの NONE 入力データ値を指定して再設定するには、次のコマンドを発行します。
      db2 connect to sample
      db2 update db cfg using mon_locktimeout none
      デッドロック・イベントの場合
      SAMPLE データベースの mon_deadlock データベース構成パラメーターをデフォルトの WITHOUT_HIST 入力データ値を指定して再設定するには、次のコマンドを発行します。
      db2 connect to sample
      db2 update db cfg using mon_deadlock without_hist
    2. ワークロード・レベル
      ロック待機イベントの場合
      db2 ALTER WORKLOAD finance COLLECT LOCK WAIT DATA NONE
      
      ロック・タイムアウト・イベントの場合
      db2 ALTER WORKLOAD finance COLLECT LOCK TIMEOUT DATA NONE
      デッドロック・イベントの場合
      db2 ALTER WORKLOAD finance COLLECT DEADLOCK DATA NONE
運用上の考慮点
上の手順でロック・イベント・モニターを作成した場合、イベントはイベント・モニター名と同名のイベント表に記録されます。イベント表は自動的に整理されないため、以下のような手法でメンテナンスが必要です。
  • イベント表の確認方法
    データベースに接続して以下の SQL でイベント表名を判別できます。
    db2 "select TABSCHEMA,TABNAME from syscat.eventtables where EVMONNAME='<イベント・モニター名>'"
  • イベント表の整理方法
    DELETE ステートメントを発行して不要なイベント削除できます。たとえば以下の SQL で直近1か月より古いデータを削除できます。
    db2 "delete from <イベント表名> where EVENT_TIMESTAMP < current timestamp - 1 month" 
    
[Db2] ロック・イベント・モニターで取得した情報の db2evmonfmt ツールを使わないフォーマット方法
[Db2] ロック・イベント・モニターで取得した情報の見方 (ロック待機イベント)
[Db2] ロック・イベント・モニターで取得した情報の見方 (ロック・タイムアウト・イベント)
[Db2] ロック・イベント・モニターで取得した情報の見方 (デッドロック・イベント)
[Db2] パスポート・アドバンテージによく寄せられる質問

Db2 デザインガイド ロックの基礎 V9.7対応
データベース・ロックのモニター

mon_locktimeout - モニター用ロック・タイムアウト構成パラメーター
mon_deadlock - モニター用デッドロック構成パラメーター
mon_lockwait - モニター用ロック待機構成パラメーター
mon_lw_thresh - モニター用ロック待機しきい値構成パラメーター

EVMON_FORMAT_UE_TO_TABLES プロシージャー - XML 文書をリレーショナル表へ移動する
お問合せ先
技術的な内容に関して、パスポート・アドバンテージの契約のもと Db2 テクニカル・サポートへお問い合わせください。
Db2 テクニカル・サポート

[{"Type":"MASTER","Line of Business":{"code":"LOB10","label":"Data and AI"},"Business Unit":{"code":"BU058","label":"IBM Infrastructure w\/TPS"},"Product":{"code":"SSEPGG","label":"Db2 for Linux, UNIX and Windows - SSEPGG"},"ARM Category":[{"code":"a8m500000008PmIAAU","label":"Monitors-\u003EEvent Monitor"}],"ARM Case Number":"","Platform":[{"code":"PF025","label":"Platform Independent"}],"Version":"10.1.0;10.5.0;11.1.0;11.5.0;9.7.0"}]

Document Information

Modified date:
25 August 2023

UID

swg21592430