CREATE EVENT MONITOR (ロック) ステートメント

CREATE EVENT MONITOR (ロック) ステートメントは、データベースを使用する際に生じるロック関連イベントを記録するイベント・モニターを作成します。

呼び出し

このステートメントは、アプリケーション・プログラムに組み込むか、あるいは対話式に発行することができます。 これは、DYNAMICRULES の実行動作がパッケージに効力を持つ場合にのみ、動的に準備できる実行可能ステートメントです (SQLSTATE 42509)。

許可

このステートメントの許可 ID が保持する特権には、以下のいずれかの権限が含まれている必要があります。
  • DBADM 権限
  • SQLADM 権限

構文

Read syntax diagramSkip visual syntax diagramCREATE EVENT MONITORevent-monitor-name FOR LOCKINGWRITE TOTABLEformatted-event-table-infoUNFORMATTED EVENT TABLE(target-table-options) AUTOSTARTMANUALSTART
formatted-event-table-info
Read syntax diagramSkip visual syntax diagram,evm-group(target-table-options)
target-table-options
Read syntax diagramSkip visual syntax diagram12TABLEtable-nameINtablespace-namePCTDEACTIVATE100PCTDEACTIVATEinteger
Notes:
  • 1 Each table option can be specified a maximum of one time (SQLSTATE 42613).
  • 2 Clauses can be separated with a space or a comma.

説明

イベント・モニター名
イベント・モニターの名前。 これは、1 部構成の名前です。 これは、SQL ID です (通常 ID または区切り ID)。 event-monitor-name (イベント・モニター名) は、 既にカタログに存在するイベント・モニターを指定する名前であってはなりません (SQLSTATE 42710)。
FOR
記録するイベント・タイプをこの後に指定します。
LOCKING
データベース・マネージャーで以下の状況が 1 つ以上発生した場合に、この受動的なイベント・モニターが、発生したすべてのロック・イベントについて記録するよう指定します。
  • LOCKTIMEOUT: ロック要求がタイムアウトした
  • DEADLOCK: ロックがデッドロックに関与した (ビクティムおよび参加者)
  • LOCKWAIT: 指定期間内でロックが取得されなかった
ロック・イベント・モニターを作成すると、ロックに関するデータが即座に収集されるわけではありません。 実際の収集対象となるロック・イベントは、ワークロード・レベルまたはデータベース・レベルで制御されます。
WRITE TO
データの出力先をこの後に指定します。
テーブル
イベント・モニターのデータの出力先が一連のフォーマット済みイベント表であることを示します。 イベント・モニターは、データ・ストリームを 1 つ以上の論理データ・グループに分け、 各グループを別個の表に挿入します。 ターゲット表のあるグループのデータは保持されますが、ターゲット表のないグループのデータは破棄されます。 グループに含まれる各モニター・エレメントは、同じ名前の表列にマップされます。 対応する表列を持つエレメントだけが表に挿入されます。 他のエレメントは破棄されます。
formatted-event-table-info
イベント・モニターの出力先となるフォーマット済みイベント表を定義します。 この節では、記録される各グループを指定する必要があります。 しかし evm-group 節が指定されない場合には、イベント・モニター・タイプのすべてのグループが記録されます。

論理データ・グループについて詳しくは、 論理データ・グループとイベント・モニター出力表 を参照してください。

evm-group
ターゲット表を定義する対象の論理データ・グループを指定します。 以下の表に示されているように、値はイベント・モニターのタイプに基づいて異なります。
イベント・モニターのタイプ evm-group 値
ロック
  • LOCK
  • LOCK_PARTICIPANTS
  • LOCK_PARTICIPANT_ACTIVITIES
  • LOCK_ACTIVITY_VALUES
  • CONTROL
UNFORMATTED EVENT TABLE
イベント・モニターのデータの出力先がフォーマットされていないイベント表であることを指定します。 フォーマットされていないイベント表は、収集されたロック・イベント・モニターのデータを格納するために使用されます。 データは、インライン化 BLOB 列内に内部バイナリー・フォーマットで格納されます。 各イベントでは複数のレコードがこの表に挿入される場合があり、それぞれの挿入されたレコードは関連する BLOB 内容も変化する別のタイプとなる可能性があります。 BLOB 列のデータは読み取り可能なフォーマットではないので、db2evmonfmt Java ベースのツール、EVMON_FORMAT_UE_TO_XML 表関数、または EVMON_FORMAT_UE_TO_TABLES プロシージャーを使用して、XML 文書またはリレーショナル表などの使用可能なフォーマットに変換する必要があります。
target-table-options
ターゲット表のオプションを指定します。 target-table-options の値が指定されていない場合、CREATE EVENT MONITOR FOR LOCKING の処理は以下のように続行されます。
  • 派生した表名が使用されます ( TABLE table-nameの説明を参照してください)。
  • CREATE TABLE を使用して表スペース名を指定しないで表が作成される場合と同じプロセスで、デフォルトの表スペースが選択されます。
  • PCTDEACTIVATE が 100 に設定されます。
TABLE テーブル名
ターゲット表の名前を指定します。 ターゲット表は、非パーティション表でなければなりません。 名前が非修飾の場合、表スキーマは CURRENT SCHEMA 特殊レジスターの値にデフォルト設定されます。 未フォーマット・イベント表の名前が指定されなかった場合、非修飾名は event-monitor-name と同じになります。つまり、未フォーマット・イベント表の名前は、イベント・モニターの名前からとられたものとなります。 フォーマット済みイベント表の名前が指定されなかった場合は、非修飾名は以下のように evm-group および event-monitorname から導出されます。
   substring(evm-group CONCAT '_'
     CONCAT event-monitor-name,1,128)
IN 表スペース名
表を作成する表スペースの名前を指定します。 CREATE EVENT MONITOR FOR LOCKING ステートメントは、表スペースを作成しません。

表スペース名が指定されなかった場合、CREATE TABLE を使用して表スペース名を指定しないで表が作成される場合と同じプロセスで表スペースが選択されます。

フォーマット済みイベント表に表スペース名を指定する際、表スペースのページ・サイズは、使用する INLINE LOB の長さに影響を及ぼします。イベント・モニターの INSERT のパフォーマンスを向上させるため、できるだけ大きなページ・サイズの表スペースを指定することを検討してください。

PCTDEACTIVATE 整数
イベント・モニターの表が自動ストレージ (非一時) または DMS 表スペースに作成される場合には、 PCTDEACTIVATE パラメーターは、どの程度表スペースが満たされた時点でイベント・モニターが自動的に非活動化されるかを指定します。 パーセンテージを表す値は、0 から 100 の範囲で指定可能です。 デフォルト値は 100 です。この 100 は、表スペースが完全にいっぱいになるときにイベント・モニターが非アクティブになることを意味します。 PCTDEACTIVATE が指定されていない場合には、デフォルト値は 100 になります。 SMS 表スペースの場合、このオプションは無視されます。
重要: ターゲット表スペースの自動サイズ変更が有効になっている場合は、PCTDEACTIVATE を 100 に設定してください。 または、この節全体を省略して、デフォルトの 100 が適用されるようにします。 それ以外の場合、表スペースが自動的にサイズ変更される前に、PCTDEACTIVTATE で指定したしきい値に表スペースが到達すると、イベント・モニターは予期せずに非アクティブになる場合があります。
AUTOSTART
イベント・モニターを実行するデータベース・パーティションをアクティブ化した時点で、イベント・モニターも自動的にアクティブ化されることを指定します。 これは、ロック・イベント・モニターのデフォルトの動作です。
MANUALSTART
SET EVENT MONITOR STATE ステートメントを使用してイベント・モニターを手動でアクティブ化しなければならないことを指定します。 アクティブ化された MANUALSTART イベント・モニターは、SET EVENT MONITOR STATE ステートメントを使用するか、インスタンスを停止することによってのみ非活動状態にできます。

  • CREATE EVENT MONITOR FOR LOCKING ステートメントが実行されるときにターゲット表がまだ存在しない場合は、そのときに作成されます。
  • CREATE EVENT MONITOR FOR LOCKING 処理時に、別のイベント・モニターで使用するために既に定義されている表が検出されると、CREATE EVENT MONITOR FOR LOCKING ステートメントは失敗し、エラーがアプリケーション・プログラムに返されます。 表名が SYSCAT.EVENTTABLES カタログ・ビューにある値と一致する場合には、その表は別のイベント・モニターによって使用されるよう定義されています。 検出された表が別のイベント・モニターで使用するようには定義されていない場合、イベント・モニターはその表を再利用します。
  • イベント・モニターをドロップしても、表はドロップされません。 関連するどの表も、イベント・モニターをドロップした後に、手動でドロップする必要があります。
  • このイベント・モニターによって作成された未フォーマット・イベント表または正規表からロック・イベント・データが自動的にプルーニングされることはありません。 未フォーマット・イベント (UE) 表からデータをプルーニングするためのオプションは、EVMON_FORMAT_UE_TO_TABLES プロシージャーを使用するときに使用できます。 正規表に書き込むイベント・モニターの場合、イベント・データは手動でプルーニングする必要があります。
  • FLUSH EVENT MONITOR ステートメントはこのイベント・モニターには適用されないため、これに対して発行しても何も影響を及ぼしません。
  • 未フォーマット・イベント表の場合、イベント・データは表のインライン化 BLOB データ列に挿入されます。 通常、BLOB データは別の LOB 表スペースに格納され、結果としてパフォーマンス上の余分なオーバーヘッドが生じてしまう恐れがあります。 基本表のデータ・ページにインライン化されると、BLOB データではこのオーバーヘッドは生じません。 データベース・マネージャーは、BLOB データのサイズが表スペースのページ・サイズからレコード接頭部を引いたサイズよりも小さい場合、自動的に未フォーマット・イベント表レコードの BLOB データ部分にインライン化されます。 このため、効率性およびアプリケーションのスループットを高めるために、イベント・モニターを可能な限り大きな表スペース (最大で 32KB までの表スペース) と関連バッファー・プールに作成することをお勧めします。
    ロック・イベント・モニターには、現在以下の 2 つのレコード・タイプがあります。
    • アプリケーション情報レコード
    • アプリケーション・アクティビティー・レコード

    アプリケーション情報レコード = 最大サイズ 3.5KB

    アプリケーション・アクティビティー・レコード = 3KB + SQL ステートメント・テキスト・サイズ (SQL ステートメント・テキスト・サイズは最大で 2MB)

    アプリケーション情報レコードは非常に小規模であり、4KB ページ・サイズが使用されている限りは必ずインライン化する必要があります。 アプリケーション・アクティビティー・レコードは、以下の公式に基づいてインライン化されます。
    Application Activity Record < inline length (Pagesize - overhead non-LOB columns (0.5KB))
       3KB + SQL statement text < inline length (Pagesize - overhead non-LOB columns (0.5KB))
    
             SQL statement text < Pagesize - nonLOB overhead (1K) - 3KB
             SQL statement text < 16KB - 1KB - 3KB
                                < 12KB

    このため、16KB ページ・サイズを使用する場合、ロック・イベント・モニター・レコードがインライン化されるのは、キャプチャーされる SQL ステートメントのサイズが 12KB より小さい場合に限られます。

  • データベースごとに 1 つのロック・イベント・モニターを作成します。 ロック・イベント・モニターを複数作成すると、 提供されるデータ量は増加しないものの、プロセッサー・サイクルおよびストレージの消費量は増加します。
    重要: 旧バージョンの製品との互換性のために、すべてのデータベースは、 DB2DETAILDEADLOCK イベント・モニターを有効にして作成されます。 ロック・イベント・モニター Db2® バージョン 9.7 で導入された は、ロックに関連するデータを収集するための優先メカニズムです。 DB2DETAILEDDEALOCK イベント・モニターは推奨されておらず、将来のリリースで除去される可能性があります。 ロック・イベント・モニターを作成する場合は、 重複した不要な情報が収集されないように、DB2DETAILEDDEADLOCK イベント・モニターを無効にしてドロップしてください。
    DB2DETAILDEADLOCK イベント・モニターを除去するには、以下の SQL ステートメントを発行します。
    SET EVENT MONITOR DB2DETAILDEADLOCK state 0
    DROP EVENT MONITOR DB2DETAILDEADLOCK 
  • パーティション・データベース環境では、データが書き込まれるターゲット表は、その表スペースが存在するデータベース・パーティション上にあるものだけです。 ターゲット表のための表スペースがいずれかのデータベース・パーティションに存在しない場合は、そのターゲット表についてのデータは無視されます。 この動作を利用すると、ユーザーは、特定のデータベース・パーティションにのみ存在する表スペースを作成することにより、選択するモニター用にデータベース・パーティションのサブセットを選択できることになります。
  • パーティション・データベース環境では、あるデータベース・パーティションにいくつかのターゲット表が存在しないものの、 その同じデータベース・パーティションに他のターゲット表が存在する場合は、 そのデータベース・パーティションに存在する未フォーマット・イベント・ターゲット表のデータだけが記録されます。

  • 例 1: この例では、作成したデータベース上で発生するロック・イベントを収集するロック・イベント・モニター LOCKEVMON を作成します。
       CREATE EVENT MONITOR LOCKEVMON
         FOR LOCKING
         WRITE TO TABLE 
    このイベント・モニターは、その出力を以下の表に書き込みます。
    • LOCK_LOCKEVMON
    • LOCK_PARTICIPANTS_LOCKEVMON
    • LOCK_PARTICIPANT_ACTIVITIES_LOCKEVMON
    • LOCK_ACTIVITY_VALUES_LOCKEVMON
    • CONTROL_LOCKEVMON
  • 例 2: この例では、データベース上で発生するロック・イベントを収集し、そのデータをフォーマットされていないイベント表 IMRAN.LOCKEVENTS に格納するロック・イベント・モニター LOCKEVMON を作成します。
       CREATE EVENT MONITOR LOCKEVMON
         FOR LOCKING
         WRITE TO UNFORMATTED EVENT TABLE (TABLE IMRAN.LOCKEVENTS)
  • 例 3: この例では、作成したデータベース上で発生するロック・イベントを収集し、そのデータを表スペース APPSPACE にあるフォーマットされていないイベント表 IMRAN.LOCKEVENTS に格納するロック・イベント・モニター LOCKEVMON を作成します。 この表スペースの使用率が 85% に達すると、このイベント・モニターは非アクティブ化されます。
       CREATE EVENT MONITOR LOCKEVMON
         FOR LOCKING
         WRITE TO UNFORMATTED EVENT TABLE 
            (TABLE IMRAN.LOCKEVENTS IN APPSPACE PCTDEACTIVATE 85)