CREATE EVENT MONITOR ステートメント
CREATE EVENT MONITOR ステートメントは、 データベースの使用中に発生する特定のイベントを記録するモニターを定義します。各イベント・モニターの定義には、データベースがイベントを記録する場所も指定します。
- アクティビティー。このイベント・モニターは、データベースを使用して発生したアクティビティー・イベントを記録します。アクティビティー・イベント・モニターの定義には、データベースがイベントを記録する場所も指定します。
- 変更履歴。イベント・モニターは、構成パラメーターやレジストリー変数の変更、および DDL ステートメントやユーティリティーの実行に関するイベントを記録します。また、イベント・モニターは、イベント・モニターの起動時に、初期構成とレジストリーの値も記録します。
- ロック。このイベント・モニターは、データベースを使用して発生したロック関連イベントを記録します。全レコードはフォーマットされていないイベント表に収集されます。
- パッケージ・キャッシュ。このイベント・モニターは、パッケージ・キャッシュ・ステートメントに関連するイベントを記録します。
- 統計。このイベント・モニターは、データベースを使用して発生した統計イベントを記録します。統計イベント・モニターの定義には、データベースがイベントを記録する場所も指定します。
- しきい値違反。このイベント・モニターは、データベースを使用して発生したしきい値違反イベントを記録します。しきい値違反イベント・モニターの定義には、データベースがイベントを記録する場所も指定します。
- 作業単位。このイベント・モニターは、作業単位の完了時にイベントを記録します。全レコードはフォーマットされていないイベント表に収集されます。
呼び出し
このステートメントは、アプリケーション・プログラムに組み込むことも、対話式に入力することもできます。これは、DYNAMICRULES の実行動作がパッケージに効力を持つ場合にのみ、 動的に準備できる実行可能ステートメントです (SQLSTATE 42509)。
許可
- DBADM 権限
- SQLADM 権限
構文
説明
- event-monitor-name
- イベント・モニターの名前は、1 部構成の名前です。 これは、SQL ID です (通常 ID または区切り ID)。 event-monitor-name (イベント・モニター名) は、 カタログに存在するイベント・モニターを指定する名前であってはなりません (SQLSTATE 42710)。
- FOR
- 記録するイベント・タイプをこの後に指定します。
- DATABASE
- 最後のアプリケーションがデータベースから切断されたときに、 イベント・モニターがデータベース・イベントを記録することを指定します。
- TABLES
- 最後のアプリケーションがデータベースから切断されたときに、 イベント・モニターがアクティブな各表に対して表イベントを記録することを指定します。 パーティション表の場合は、アクティブな各表の各データ・パーティションごとに 1 つの表イベントが記録されます。 アクティブな表とは、データベースへの最初の接続以降に変更された表です。
- DEADLOCKS
-
注: このオプションは使用すべきではありません。これの使用はもはや推奨されておらず、今後のリリースで除去される可能性があります。 ロック・タイムアウト、ロック待機、およびデッドロックなどのロック関連イベントをモニターするには、CREATE EVENT MONITOR FOR LOCKING ステートメントを使用してください。
- TABLESPACES
- 最後のアプリケーションがデータベースから切断されたときに、 イベント・モニターが各表スペースに関する表スペース・イベントを記録することを指定します。
- BUFFERPOOLS
- 最後のアプリケーションがデータベースから切断されたときに、 イベント・モニターがバッファー・プール・イベントを記録することを指定します。
- CONNECTIONS
- アプリケーションがデータベースから切断されたときに、 イベント・モニターが接続イベントを記録することを指定します。
- STATEMENTS
- SQL ステートメントの実行が完了した時点で、 イベント・モニターがステートメント・イベントを記録することを指定します。
- TRANSACTIONS
-
注: このオプションは使用すべきではありません。これの使用はもはや推奨されておらず、今後のリリースで除去される可能性があります。 トランザクション・イベントをモニターするには、CREATE EVENT MONITOR FOR UNIT OF WORK ステートメントを使用してください。
- WHERE event-condition
- どの接続が CONNECTION、STATEMENT、
または TRANSACTION イベントを引き起こすかを決定するフィルターを定義します。
特定の接続に関してイベント条件の結果が真の場合、その接続は要求されたイベントを生成します。
この節は、WHERE 節の特殊な形式です。標準的な検索条件と混同しないようにしてください。
アプリケーションが特定のイベント・モニターに対するイベントを生成するかどうかを決定するために、この WHERE 節は次のように評価されます。- イベント・モニターが初めてオンになった時点でアクティブである各接続がまず評価されます。
- それ以後は、データベースへの新たな接続が、その接続時に評価されます。
WHERE 節は各イベントごとに評価されるわけではありません。
WHERE 節の指定がない場合、指定したイベント・タイプのイベントがすべてモニターされます。
event-condition は、データベース・コード・ページ内で、32 678 バイト以内でなければなりません (SQLSTATE 22001)。
- APPL_ID
- 各接続のアプリケーション ID を comparison-string と比較して、その接続で CONNECTION、STATEMENT、または TRANSACTION イベント (指定されたもの) を生成するかどうかを決定することを指定します。
- AUTH_ID
- 各接続の許可 ID を comparison-string と比較して、その接続で CONNECTION、STATEMENT、または TRANSACTION のイベント (指定されたもの) を生成するかどうかを決定することを指定します。
- APPL_NAME
- 各接続のアプリケーション・プログラム名を comparison-string と比較して、その接続で CONNECTION、STATEMENT、または TRANSACTION のイベント (指定されたもの) を生成するかどうかを決定することを指定します。
アプリケーション・プログラム名は、 (最後のパス区切り記号の後の) アプリケーション・プログラム・ファイル名の最初の 20 バイトです。
- comparison-string
- データベースに接続する各アプリケーションの APPL_ID、 AUTH_ID、 または APPL_NAME と比較するストリング。 comparison-string はストリング定数でなければなりません (つまり、ホスト変数および他のストリング式は使用できません )。
- WRITE TO
- データの出力先をこの後に指定します。
- TABLE
- イベント・モニターのデータの出力先が一連のデータベース表であることを示します。
イベント・モニターは、データ・ストリームを 1 つ以上の論理データ・グループに分け、
各グループを別個の表に挿入します。
ターゲット表が存在するグループのデータは保持されますが、ターゲット表が存在しないグループのデータは破棄されます。
グループに含まれる各モニター・エレメントは、同じ名前の表列にマップされます。対応する表列を持つエレメントだけが表に挿入されます。
他のエレメントは破棄されます。
- evm-group-info
- 論理データ・グループのターゲット表を定義します。この節は、記録するグループごとに指定する必要があります。しかし evm-group-info 節が指定されない場合には、
イベント・モニター・タイプのすべてのグループが記録されます。
論理データ・グループについて詳しくは、論理データ・グループおよびイベント・モニター出力表を参照してください。
- evm-group
- ターゲット表を定義する対象の論理データ・グループを指定します。
以下の表に示されているように、値はイベント・モニターのタイプに基づきます。
表 1. イベント・モニターのタイプに基づく evm-group の値 イベント・モニターのタイプ evm-group 値 データベース - DB
- CONTROL1
- DBMEMUSE
表 - TABLE
- CONTROL1
デッドロック - CONNHEADER
- DEADLOCK
- DLCONN
- CONTROL1
詳細なデッドロック - CONNHEADER
- DEADLOCK
- DLCONN2
- DLLOCK3
- CONTROL1
詳細な履歴のあるデッドロック - CONNHEADER
- DEADLOCK
- DLCONN2
- DLLOCK3
- STMTHIST
- CONTROL1
詳細な履歴値のあるデッドロック - CONNHEADER
- DEADLOCK
- DLCONN2
- DLLOCK3
- STMTHIST
- STMTVALS
- CONTROL1
表スペース - TABLESPACE
- CONTROL1
バッファー・プール - BUFFERPOOL
- CONTROL1
接続 - CONNHEADER
- CONN
- CONTROL1
- CONNMEMUSE
ステートメント - CONNHEADER
- STMT
- SUBSECTION4
- CONTROL1
トランザクション - CONNHEADER
- XACT
- CONTROL1
アクティビティー - ACTIVITY
- ACTIVITYMETRICS
- ACTIVITYSTMT
- ACTIVITYVALS
- CONTROL1
統計 - QSTATS
- SCSTATS
- SCMETRICS
- WCSTATS
- WLSTATS
- WLMETRICS
- HISTOGRAMBIN
- CONTROL1
しきい値違反 - THRESHOLDVIOLATIONS
- CONTROL1
ロッキング5 - LOCK
- LOCK_PARTICIPANTS
- LOCK_PARTICIPANT_ACTIVITIES
- LOCK_ACTIVITY_VALUES
- CONTROL1
パッケージ・キャッシュ5 - PKGCACHE
- PKGCACHE_METRICS
- CONTROL1
作業単位5 - UOW
- UOW_METRICS
- UOW_PACKGE_LIST
- UOW_EXECUTABLE_LIST
- CONTROL1
変更履歴 - CHANGESUMMARY
- EVMONSTART
- TXNCOMPLETION
- DDLSTMTEXEC
- DBDBMCFG
- REGVAR
- UTILSTART
- UTILSTOP
- UTILPHASE
- UTILLOCATION
- CONTROL1
1 論理データ・グループ dbheader (conn_time エレメントのみ)、開始およびオーバーフローは、すべて CONTROL グループに書き込まれます。イベント・モニターがブロック化されておらず、イベントが破棄された場合に、 オーバーフロー・グループが書き込まれます。
2 DETAILED_DLCONN イベントに相当します。
3 各 DETAILED_DLCONN イベント内で発生する LOCK 論理データ・グループに相当します。
4 パーティション・データベース環境に対してのみ作成されます。
5 このイベント・モニター・タイプのフォーマット設定イベント表のバージョンを指します。
- target-table-options
- グループのターゲット表を指定します。
target-table-options の値が指定されていない場合、CREATE EVENT MONITOR の処理は以下のように続行されます。
- 生成された表名が使用されます (TABLE table-name の説明を参照)。
- デフォルトの表スペースが選択されます (IN tablespace-name の説明を参照)。
- すべてのエレメントが含まれます。
- PCTDEACTIVATE および TRUNC は指定されません。
- TABLE table-name
- ターゲット表の名前を指定します。ターゲット表は非パーティション行オーガナイズ表でなければなりません。名前が非修飾の場合、表スキーマは CURRENT SCHEMA 特殊レジスターの値にデフォルト設定されます。名前が指定されない場合、
以下のように非修飾名は evm-group および event-monitor-name から派生します。
substring(evm-group CONCAT '_' CONCAT event-monitor-name,1,128) - IN tablespace-name
- 表を作成する表スペースの名前を指定します。 表スペース名を指定しない場合、CREATE TABLE を使用して表スペース名を指定しないで表が作成される場合と同じプロセスで表スペースが選択されます。
- PCTDEACTIVATE integer
- イベント・モニターの表が自動ストレージ (非一時) または DMS 表スペースに作成される場合には、PCTDEACTIVATE パラメーターは、どの程度表スペースが満たされた時点でイベント・モニターが自動的に非活動化されるかを指定します。パーセンテージを表す値は、0 から 100 の範囲で指定可能です。この 100 は、表スペースがいっぱいになるときにイベント・モニターが非アクティブになることを意味します。PCTDEACTIVATE が指定されていない場合には、デフォルト値は 100 になります。SMS 表スペースの場合、このオプションは無視されます。重要: ターゲット表スペースの自動サイズ変更が有効になっている場合、PCTDEACTIVATE を 100 に設定します。または、この節全体を省略して、デフォルトの 100 が適用されるようにします。 それ以外の場合、表スペースが自動的にサイズ変更される前に、PCTDEACTIVTATE で指定したしきい値に表スペースが到達すると、イベント・モニターは予期せずに非アクティブになる場合があります。
- TRUNC
- STMT_TEXT および STMT_VALUE_DATA 列を VARCHAR(n) で定義することを指定します。
ここで n は、表行に収めることができる最大サイズです。
この場合、n バイトより大きいデータは切り捨てられます。
以下の例は、n の値の計算方法を例示しています。
次のような前提があります。
- 表は、32K ページを使用する表スペースに作成されます。
- 表内の他のすべての列の合計は、357 バイトです。
- INCLUDES
- 続くエレメントを表に含めることを指定します。
- EXCLUDES
- 続いて指定するエレメントを表に含めないことを指定します。
- element
- モニター・エレメントを指定します。
エレメント情報は、以下の形式で指定できます。
- エレメント情報を指定しない。 この場合、すべてのエレメントが CREATE TABLE ステートメントに組み込まれます。
- 含めるエレメントを INCLUDES (element1, element2, ..., elementn) の形式で指定する。 これらのエレメントについてのみ、表列が作成されます。
- 除外するエレメントを EXCLUDES (element1, element2, ..., elementn) の形式で指定する。 これらのエレメントを除くすべてのエレメントについて表列が作成されます。
グループのエレメントの完全なリストを含む CREATE EVENT MONITOR ステートメントを作成するには、db2evtbl コマンドを使用します。
- BLOCKED
- イベントを生成する各エージェントは、2 つのイベント・バッファーがいっぱいであることを検出した場合に、イベント・バッファーがディスクへ書き込まれるのを待機しなければならないことを指定します。イベント・データの損失を防止するには、BLOCKED を選択してください。これがデフォルトのオプションです。
- PIPE
- イベント・モニター・データの出力先が名前付きパイプであることを指定します。
イベント・モニターは、
データを単一のストリーム (単一の無限に長いファイルであるかのように) でパイプに書き込みます。
データをパイプに書き込む場合、イベント・モニターは書き込みのブロックを実行しません。パイプ・バッファーに空きがなければ、イベント・モニターはデータを廃棄します。データの損失を防ぐには、モニター・アプリケーションが即座にデータを読み取る必要があります。
- pipe-name
- イベント・モニターがデータを書き込むパイプの名前 (AIX® では FIFO) を指定します。パイプの命名規則は、プラットフォームごとに異なります。
オペレーティング・システム 命名規則 AIX
HP-UX
Solarisパイプ名はファイル名と同様に扱われます。したがって、相対パイプ名を使用することができ、相対パス名と同様に扱われます (path-name を参照)。 Linux パイプ名はファイル名と同様に扱われます。したがって、相対パイプ名を使用することができ、相対パス名と同様に扱われます (path-name を参照)。 Windows パイプ名には特殊な構文があるため、結果として絶対パイプ名が必要です。 パイプの存在は、イベント・モニターの作成時には検査されません。イベント・モニターがアクティブ化されるときまでに、モニター・アプリケーションがパイプを作成し、読み取り用にオープンしておく必要があります。パイプが使用可能になっていない場合、イベント・モニターは自動でオフになり、エラーがログに記録されます。(つまり、AUTOSTART オプションの結果としてイベント・モニターがデータベースの開始時にアクティブ化された場合、 イベント・モニターはエラーをシステム・エラー・ログに記録します。)SET EVENT MONITOR STATE SQL ステートメントでイベント・モニターをアクティブ化すると、そのステートメントは失敗します (SQLSTATE 58030)。
- FILE
- イベント・モニターのデータの出力先がファイル (または一連のファイル) であることを示します。
イベント・モニターは、拡張子「evt」が付いた一連の 8 文字の番号付きのファイルとして、データ・ストリームを書き出します (例: 00000000.evt、00000001.evt、00000002.evt)。データが細かく分割されている場合でも、
データは 1 つの論理ファイルと見なす必要があります (つまり、
データ・ストリームの最初はファイル 00000000.evt の最初のバイトであり、
データ・ストリームの最後は、ファイル nnnnnnnn.evt の最後のバイトになります)。
各ファイルの最大サイズおよびファイルの最大数を定義できます。イベント・モニターは、1 つのイベント・レコードを 2 つのファイルに分割しません。ただしイベント・モニターは、互いに関連する複数のレコードを 2 つの異なるファイルに記録する場合があります。このデータを使用するアプリケーションが、イベント・ファイルの処理時に、関連する情報を追跡する必要があります。
- path-name
- イベント・モニターがイベント・ファイルのデータを書き込むディレクトリーの名前を指定します。これはサーバーの既知のパスでなければなりませんが、パス自体は別のデータベース・パーティション (例えば、NFS にマウントされたファイル) に存在していてもかまいません。path-name の指定には、ストリング定数を使用する必要があります。
ディレクトリーは、CREATE EVENT MONITOR の時に存在している必要はありません。 ただし、イベント・モニターがアクティブ化される時点で、ターゲット・パスが存在しているかどうかの検査が行われます。 そのときにターゲット・パスが存在しない場合は、エラー (SQLSTATE 428A3) になります。
絶対パスを指定すると、そのパスが使用されます。
相対パス (ルートから始まらないパス) が指定されている場合は、データベース・ディレクトリーの DB2EVENT ディレクトリーからの相対パスが使用されます。
複数のイベント・モニターに指定するターゲット・パスを同じパスにすることはできます。 しかし、それらのイベント・モニターのうちいずれかが最初にアクティブ化され、ターゲット・ディレクトリーが空でない場合は、他のイベント・モニターをアクティブにすることはできません。
- file-options
- ファイル形式のオプションを指定します。
- MAXFILES NONE
- イベント・モニターがいくつでもイベント・ファイルを作成できることを指定します。これはデフォルトです。
- MAXFILES number-of-files
- 特定のイベント・モニター用に存在するイベント・モニター・ファイル数を常に制限することを指定します。イベント・モニターは、追加のファイルを作成する必要がある場合に、必ず、ディレクトリー内の .evt ファイルの数が number-of-files より少ないかどうかを検査します。既にこの制限に達している場合、イベント・モニターは自動でオフになります。
イベント・ファイルの作成後にアプリケーションでディレクトリーからイベント・ファイルを削除すれば、イベント・モニターが生成できるファイルの総数は、number-of-files を超えることができます。このオプションは、指定した量を超えるディスク・スペースがイベント・データに使用されないようにするために、用意されています。
- MAXFILESIZE pages
- 各イベント・モニター・ファイルのサイズを制限することを指定します。イベント・モニターは、新しいイベント・レコードをファイルに書き込むときに、そのファイルが pages (4 K ページ単位) を超えないかどうかを調べます。結果のファイルが大きすぎる場合、イベント・モニターはその次のファイルに切り替えます。
このオプションのデフォルト値は次のとおりです。
- Linux - 1000 個の 4K ページ
- UNIX - 1000 個の 4K ページ
- Windows - 200 個の 4K ページ
ページ数は、少なくともイベント・バッファーのサイズ (ページ数) よりも大きくなければなりません。 この要件が満たされていない場合、エラー (SQLSTATE 428A4) になります。
- MAXFILESIZE NONE
- ファイルのサイズに制限を設定しないことを指定します。MAXFILESIZE NONE を指定すると、MAXFILES 1 も指定する必要があります。 このオプションは、特定のイベント・モニターのイベント・データすべてを 1 つのファイルに入れることを示します。このような場合、イベント・ファイルは 00000000.evt だけになります。
- BUFFERSIZE pages
- イベント・モニター・バッファーのサイズを指定します (4K ページ単位)。
イベント・モニターのパフォーマンスを向上させるために、
すべてのイベント・モニターのファイル入出力はバッファーに入れられます。
バッファーが大きいほど、イベント・モニターによって行われる入出力は少なくなります。活動頻度の高いイベント・モニターには、比較的活動頻度の低いイベント・モニターよりも大きいバッファーを用意します。モニターが開始されると、指定したサイズの 2 つのバッファーが割り振られます。
イベント・モニターは、二重バッファリングを使用して、非同期入出力を可能にします。
各バッファーのデフォルト・サイズは 4 ページです (16 K バッファーが 2 つ割り振られます)。最小サイズは 1 ページです。バッファーの最大サイズは、MAXFILESIZE パラメーターの値と、モニター・ヒープのサイズによって制約されます。バッファーはこのヒープから割り振られるからです。 多くのイベント・モニターを同時に使用する場合には、 mon_heap_sz データベース・マネージャー構成パラメーターのサイズを大きくします。
データをパイプに書き込むイベント・モニターにも、それぞれサイズが 1 ページの 2 つの内部 (構成不可) バッファーがあります。これらのバッファーも、モニター・ヒープ (MON_HEAP) から割り振られます。 出力先がパイプである各アクティブ・イベント・モニターごとに、データベース・ヒープのサイズを 2 ページ分大きくしてください。
- BLOCKED
- イベントを生成する各エージェントは、2 つのイベント・バッファーがいっぱいであることを検出した場合に、イベント・バッファーがディスクへ書き込まれるのを待機しなければならないことを指定します。イベント・データの損失を防止するには、BLOCKED を選択してください。これはデフォルト・オプションです。
- NONBLOCKED
- イベントを生成する各エージェントは、両方のイベント・バッファーがいっぱいであることを検出した場合に、イベント・バッファーがディスクへ書き込まれるのを待機しないことを指定します。NONBLOCKED の指定を伴うイベント・モニターは、BLOCKED の指定を伴うイベント・モニターほどには、 データベース操作の速度を低下させません。 ただし、NONBLOCKED のイベント・モニターは、活動頻度の高いシステムではデータの消失の可能性が高くなります。
- APPEND
- イベント・モニターがオンになった時点でイベント・データ・ファイルが存在する場合、
そのイベント・モニターは新しいイベント・データをデータ・ファイルの既存のストリームに付加するように指定します。イベント・モニターを再アクティブ化すると、オフにされた時点のイベント・ファイルに対して書き込みを再開します。APPEND はデフォルトのオプションです。
新しく作成したイベント・モニターがイベント・データを書き込むディレクトリーにイベント・データが存在していても、CREATE EVENT MONITOR 時には APPENDオプションは適用されません。
- REPLACE
- イベント・モニターがオンになった時点でイベント・データ・ファイルが存在する場合、 そのイベント・モニターが、イベント・ファイルをすべて削除して、 ファイル 00000000.evt へのデータの書き込みを開始するように指定します。
- MANUALSTART
- SET EVENT MONITOR STATE ステートメントを使用してイベント・モニターを手動でアクティブ化することを指定します。アクティブ化された MANUALSTART イベント・モニターは、SET EVENT MONITOR STATE ステートメントを使用するか、インスタンスを停止することによってのみ非活動状態にできます。これはデフォルトです。
- AUTOSTART
- イベント・モニターを実行するデータベース・パーティションをアクティブ化した時点で、イベント・モニターも自動的にアクティブ化することを指定します。
- ON DBPARTITIONNUM db-partition-number
- ファイルまたはパイプのイベント・モニターを実行するデータベース・パーティションを指定します。
モニター有効範囲が LOCAL と定義された場合、指定されたパーティションまたはメンバーについてのみデータが収集されます。モニター有効範囲が GLOBAL と定義された場合、すべてのデータベース・パーティションまたはメンバーがデータを収集し、指定の番号のデータベース・パーティションまたはメンバーに報告を行います。I/O コンポーネントは、指定したデータベース・パーティションまたはメンバーで物理的に実行され、指定したファイルまたはパイプにレコードを書き込みます。
この節は、表イベント・モニターには無効です。パーティション・データベース環境では、表書き込みイベント・モニターは、 ターゲット表のための表スペースが定義されているすべてのデータベース・パーティションで、イベントの実行と書き込みを行います。
この節が指定されていない場合、アプリケーションの現在の接続先のデータベース・パーティション番号が使用されます。
- LOCAL
- イベント・モニターはモニターが稼働しているデータベース・パーティションについてのみ報告します。
この報告は、データベース活動の部分的なトレースです。
これはデフォルトです。
この節は、ファイルまたはパイプ・モニターに有効です。これは、表イベント・モニターには有効ではありません。
- GLOBAL
- イベント・モニターはすべてのデータベース・パーティションについて報告します。パーティション・データベースの場合、GLOBAL と定義できるのは DEADLOCKS イベント・モニターのみです。
この節は、ファイルまたはパイプ・モニターに有効です。これは、表イベント・モニターには有効ではありません。
規則
- 各イベント・タイプ (DATABASE、TABLES、DEADLOCK、...) は、特定の 1 つのイベント・モニター定義にのみ指定できます。
注
- イベント・モニターの定義は、SYSCAT.EVENTMONITORS カタログ・ビューに記録されます。 イベント自体は、SYSCAT.EVENTS カタログ・ビューに記録されます。 ターゲット表の名前は、SYSCAT.EVENTTABLES カタログ・ビューに記録されます。
- DEADLOCKS ではなく DEADLOCKS WITH DETAILS を使用すると、パフォーマンスに影響します。デッドロックが生じると、 データベース・マネージャーは、追加のデッドロック情報を記録する余分の時間を必要とします。
- CONNHEADER イベントは通常、接続が確立される度に書き込まれます。しかし、DEADLOCKS WITH DETAILS のみのイベント・モニターを作成した場合には、 初めて接続がデッドロックに関係したときに、CONNHEADER イベントが書き込まれます。
- 複数のデータベース・パーティションが存在するデータベースの場合は、DEADLOCKS イベント・タイプの FILE および PIPE イベント・モニターで ON DBPARTITIONNUM 節を使用して、イベント・モニター自体の存在場所を指定できます。関連する情報が他のデータベース・パーティションにある場合は、この場所に送られて、処理されます。
- 複数のデータベース・パーティションが存在するデータベースの場合、デッドロック・イベント・モニターは、デッドロックのロックを所有するアプリケーションに関する情報を、それらのロックが存在していたすべてのデータベース・パーティションから受け取ります。アプリケーションの接続先データベース・パーティション (アプリケーション・コーディネーター・パーティション) が、関係しているデータベース・パーティションの 1 つではない場合、そのデータベース・パーティションからはデッドロック・イベントに関する情報を受信しません。
- BUFFERSIZE パラメーターは、STMT、STMT_HISTORY、DATA_VALUE、および DETAILED_DLCONN イベントのサイズを制約します。
STMT または STMT_HISTORY イベントがバッファーの大きさに合わない場合、ステートメント・テキストを切り捨ててそのイベントを切り捨てます。
DETAILED_DLCONN イベントがバッファーの大きさに合わない場合、
ロックを除去してそのイベントを切り捨てます。
それでもまだ大きさが合わない場合には、ステートメント・テキストを切り捨てます。
DATA_VAL イベントがバッファーの大きさに合わない場合、データ値を切り捨てます。
イベント・モニター WITH DETAILS HISTORY VALUES (および、程度はそれほどではないものの WITH DETAILS HISTORY) は、ステートメントおよびそれらのデータ値を追跡するために、かなりの量のモニター・ヒープ・スペースを使用します (mon_heap_sz 構成パラメーターを参照)。
- イベント・モニターを実行するデータベース・パーティションがアクティブでない場合は、次回そのデータベース・パーティションをアクティブ化した時点で、イベント・モニターもアクティブ化されます。
- イベント・モニターは、アクティブ化の後に、明示的に非アクティブ化されるか、インスタンスがリサイクルされるまで、自動始動のイベント・モニターのように動作します。 つまり、イベント・モニターがアクティブなときにデータベース・パーティションが非アクティブ化され、その後で再びアクティブ化された場合は、イベント・モニターも明示的に再アクティブ化されます。
- 表書き込みイベント・モニター 一般注意:
- すべてのターゲット表は、CREATE EVENT MONITOR ステートメントの実行時に作成されます。
- 何らかの理由により表の作成に失敗すると、エラーがアプリケーション・プログラムに戻され、 CREATE EVENT MONITOR ステートメントは失敗します。
- 1 つのターゲット表は、1 つのイベント・モニターでのみ使用可能です。CREATE EVENT MONITOR の処理中にターゲット表が別のイベント・モニター用に定義されていることが検出されると、CREATE EVENT MONITOR ステートメントは失敗し、エラーがアプリケーション・プログラムに戻されます。表名が SYSCAT.EVENTTABLES カタログ・ビューにある値と一致する場合には、その表は別のイベント・モニターによって使用されるよう定義されています。
- CREATE EVENT MONITOR 処理時に、表が既に存在するものの別のイベント・モニターによって使用されるよう定義されていない場合には、表は作成されず、処理は続行されます。警告がアプリケーション・プログラムに出されます。
- 表スペースは、CREATE EVENT MONITOR ステートメントの実行前に存在していなければなりません。CREATE EVENT MONITOR ステートメントは、表スペースを作成しません。
- LOCAL および GLOBAL キーワードは指定されている場合でも無視されます。 WRITE TO TABLE イベント・モニターの場合、イベント・モニターの出力プロセスまたはスレッドは、 インスタンスの各データベース・パーティションで開始され、 そうした個々のプロセスは実行しているデータベース・パーティションのデータのみを報告します。
- 表書き込みイベント・モニターでは、フラット・モニター・ログ・ファイル形式またはパイプ形式の以下のイベント・タイプは記録されません。
- LOG_STREAM_HEADER
- LOG_HEADER
- DB_HEADER (エレメント db_name および db_path は記録されません。 エレメント conn_time は CONTROL で記録されます)。
- パーティション・データベース環境では、
表スペースが存在するデータベース・パーティション上のターゲット表だけにデータが書き込まれます。
ターゲット表のための表スペースがいずれかのデータベース・パーティションに存在しない場合は、そのターゲット表についてのデータは無視されます。
この動作によってユーザーは、特定のデータベース・パーティション上にのみ存在する表スペースを作成して、
モニターするデータベース・パーティションのサブセットを選択できます。
パーティション・データベース環境で、 いくつかのターゲット表がデータベース・パーティションに存在しないものの、 そのデータベース・パーティションに他のターゲット表がある場合には、 そのデータベース・パーティションにあるターゲット表についてのデータだけが記録されます。
- ユーザーは、すべてのターゲット表を手動で整理する必要があります。
- 表の列名は、イベント・モニター・エレメント ID と一致します。対応するターゲット表列のないイベント・モニター・エレメントは、 無視されます。
- グループのエレメントの完全なリストを含む CREATE EVENT MONITOR コマンドを作成するには、db2evtbl コマンドを使用します。
- モニター・エレメントに使用される列のタイプは、以下のマッピングと一致します。
SQLM_TYPE_STRING CHAR[n], VARCHAR[n] or CLOB(n) (イベント・モニター内のデータが n バイトを超えた場合 切り捨てが行われる。) SQLM_TYPE_U8BIT and SQLM_TYPE_8BIT SMALLINT, INTEGER or BIGINT SQLM_TYPE_16BIT and SQLM_TYPE_U16BIT SMALLINT, INTEGER or BIGINT SQLM_TYPE_32BIT and SQLM_TYPE_U32BIT INTEGER or BIGINT SQLM_TYPE_U64BIT and SQLM_TYPE_64BIT BIGINT sqlm_timestamp TIMESTAMP sqlm_time(elapsed time) BIGINT sqlca: sqlerrmc VARCHAR[72] sqlstate CHAR[5] sqlwarn CHAR[11] other fields INTEGER or BIGINT - 列は、NOT NULL になるよう定義されています。
- CLOB 列を含む表のパフォーマンスは VARCHAR 列を含む表より劣るので、evm-group 値 STMT (DEADLOCKS WITH DETAILS イベント・タイプを使用する場合は evm-group 値 DLCONN) を指定する場合は、TRUNC キーワードの使用を検討してください。
- 他のターゲット表とは異なり、
CONTROL 表の列はモニター・エレメント ID と一致しません。
列は、以下のように定義されます。
列名 データ・タイプ NULL 可能 説明 PARTITION_KEY INTEGER N 分散キー (パーティション・データベースのみ) PARTITION_NUMBER INTEGER N データベース・パーティション番号 (パーティション・データベースのみ) EVMONNAME VARCHAR(128) N イベント・モニターの名前 MESSAGE VARCHAR(128) N MESSAGE_TIME 列の性質を記述します。 詳しくは、message - コントロール表メッセージ : モニター・エレメントを参照してください。
MESSAGE_TIME TIMESTAMP N タイム・スタンプ - パーティション・データベース環境では、各表の最初の列は名前が PARTITION_KEY で、 NOT NULL であり、INTEGER タイプです。 この列は、表の分散キーとして使用されます。この列の値が選択されるため、各イベント・モニター・プロセスは、そのプロセスを実行しているデータベース・パーティションにデータを挿入します。つまり、挿入操作はイベント・モニター・プロセスを実行しているデータベース・パーティションでローカルに実行されます。任意のデータベース・パーティションで、PARTITION_KEY フィールドは同じ値を含みます。つまり、あるデータベース・パーティションをドロップしてデータを再分散させる場合には、ドロップされるデータベース・パーティション上のすべてのデータが、均等に分散されるのではなく、別の 1 つのデータベース・パーティションに移されることになります。したがって、データベース・パーティションを除去する前に、 そのデータベース・パーティション上のすべての表行の削除を考慮してください。
- パーティション・データベース環境では、PARTITION_NUMBER という名前の列を各表で定義できます。この列は NOT NULL で INTEGER タイプです。 データが挿入されたデータベース・パーティションの番号が含まれています。 PARTITION_KEY 列とは異なり、PARTITION_NUMBER 列は必須ではありません。 PARTITION_NUMBER 列は、非パーティション・データベース環境では使用できません。
- デフォルトの表属性が使用されます。 分散キーを除き (パーティション・データベースのみ)、表の作成時には追加のオプションは指定されません。
- 表の索引を作成できます。
- 別の表属性 (揮発性、RI、トリガー、制約など) を追加できますが、イベント・モニター・プロセス (またはスレッド) はそれらを無視します。
- 表属性として「not logged initially」(最初はログ記録されない) が追加されると、最初の COMMIT 時にオフになり、オンに戻すことはできません。
- イベント・モニターをアクティブ化する際、すべてのターゲット表名が SYSCAT.EVENTTABLES カタログ・ビューから取り出されます。
- パーティション・データベース環境では、 インスタンスの各データベース・パーティションでアクティブ化処理が行われます。 特定のデータベース・パーティションで、アクティブ化処理は、それぞれのターゲット表ごとに、 表スペースとデータベース・パーティション・グループを判別します。 イベント・モニターは、データベース・パーティションに少なくとも 1 つのターゲット表が存在する場合、 そのデータベース・パーティションでアクティブ化します。さらに、データベース・パーティションにいずれかのターゲット表が見つからない場合は、 そのターゲット表にはフラグが立てられ、 そのターゲット表を宛先とするデータが実行時処理中にドロップされるようにします。
- イベント・モニターがアクティブ化する際にターゲット表が存在しない場合 (またはパーティション・データベース環境で、表スペースがデータベース・パーティションにない場合) には、アクティブ化は続行され、この表に挿入されるはずであったデータは無視されます。
- アクティブ化処理は、各ターゲット表の妥当性検査をします。 妥当性検査がうまくいかないと、イベント・モニターのアクティブ化は失敗し、 管理ログにメッセージが書き込まれます。
- パーティション・データベース環境におけるアクティブ化の際に、 FIRST_CONNECT および EVMON_START の CONTROL 表行は、 カタログ・データベース・パーティションでのみ挿入されます。カタログ・データベース・パーティションにコントロール表のための表スペースが存在しなければなりません。カタログ・データベース・パーティションに存在しない場合は、これらの挿入は行われません。
- パーティション・データベース環境では、 表書き込みイベント・モニターがアクティブであるときにパーティションがまだアクティブでない場合には、 イベント・モニターは次にそのパーティションがアクティブ化されたときにアクティブ化されます。
- イベント・モニターは DATAACCESS 権限で実行されます。
- イベント・モニターがアクティブであるときに、ターゲット表への挿入操作が失敗すると、以下のようになります。
- コミットされていない変更がロールバックされます。
- メッセージが、管理ログに書き込まれます。
- イベント・モニターが非アクティブになります。
- イベント・モニターがアクティブである場合には、イベント・モニター・バッファーの処理が終わるとローカル COMMIT が実行されます。
- パーティション・データベース環境では、実際のステートメント・テキスト (最長 2 MB) は、アプリケーション・コーディネーターのデータベース・パーティション上のイベント・モニター・プロセスによってのみ (STMT または DLCONN 表に) 保管されます。他のデータベース・パーティションでは、この値の長さはゼロです。
- 最後のアプリケーションが終了すると、すべての表書き込みイベント・モニターが非アクティブ化されます (データベースが明示的にアクティブ化されていた場合)。パーティション・データベース環境では、 カタログ・パーティションが非活動化されると表書き込みイベント・モニターが非活動化されます。
- DROP EVENT MONITOR ステートメントはターゲット表をドロップしません。
- 表書き込みイベント・モニターはアクティブになると各ターゲット表に対する IN 表ロックを獲得して、イベント・モニターがアクティブな間に表が変更されないようにします。表ロックは、イベント・モニターがアクティブである間は、すべての表において維持されます。 ターゲット表のいずれかに排他的アクセスが必要な場合 (例えば、ユーティリティーを実行する場合) は、まずイベント・モニターを非アクティブ化して表ロックを解放してから、排他的アクセスを試みてください。
- 代替構文:
以下の構文は、製品間の互換性のためにのみサポートされています。これらの代替は非標準であり、使用すべきではありません。
- DBPARTITIONNUM の代わりに NODE を指定できます。
- target-table-options 節では、コンマを使って複数のオプションを分離することができます。
例
- 例 1:
次の例では、SMITHPAY と呼ばれるイベント・モニターを作成します。
このイベント・モニターは、データベースに関するイベント・データと、許可 ID JSMITH が所有する PAYROLL アプリケーションによって実行される SQL ステートメントに関するイベント・データを収集します。データは、絶対パス /home/jsmith/event/smithpay/ に付加されます。最大 25 のファイルが作成されます。各ファイルの最大長は 4K ページ 1 024 個分です。ファイル入出力は非ブロック化されます。
CREATE EVENT MONITOR SMITHPAY FOR DATABASE, STATEMENTS WHERE APPL_NAME = 'PAYROLL' AND AUTH_ID = 'JSMITH' WRITE TO FILE '/home/jsmith/event/smithpay' MAXFILES 25 MAXFILESIZE 1024 NONBLOCKED APPEND - 例 2: 次の例では、DEADLOCKS_EVTS と呼ばれるイベント・モニターを作成します。
このイベント・モニターは、デッドロック・イベントを収集して、それらを相対パス DLOCKS に書き込みます。ファイルは 1 つ作成され、ファイル・サイズに制限はありません。イベント・モニターがアクティブ化されるたびに、
ファイル 00000000.evt が存在する場合にはそこにイベント・データが付加されます。このイベント・モニターは、データベースが開始されるたびに開始されます。入出力はデフォルトでブロック化されます。
CREATE EVENT MONITOR DEADLOCK_EVTS FOR DEADLOCKS WRITE TO FILE 'DLOCKS' MAXFILES 1 MAXFILESIZE NONE AUTOSTART - 例 3: この例では、DB_APPLS と呼ばれるイベント・モニターを作成します。
このイベント・モニターは、接続イベントを収集し、
それらのデータを名前付きパイプ /home/jsmith/applpipe に書き込みます。
CREATE EVENT MONITOR DB_APPLS FOR CONNECTIONS WRITE TO PIPE '/home/jsmith/applpipe' - 例 4: この例では、パーティション・データベース環境であることが前提で、
FOO と呼ばれるイベント・モニターを作成します。
このイベント・モニターは SQL ステートメント・イベントを収集し、
以下の派生名で SQL 表に書き込みます。
- CONNHEADER_FOO
- STMT_FOO
- SUBSECTION_FOO
- CONTROL_FOO
CREATE EVENT MONITOR FOO FOR STATEMENTS WRITE TO TABLE - 例 5 この例では、パーティション・データベース環境であることが前提で、
BAR と呼ばれるイベント・モニターを作成します。
このイベント・モニターは SQL ステートメントおよびトランザクション・イベントを収集し、
以下のように表に書き込みます。
- STMT グループからのすべてのデータは、MYDEPT.MYSTMTINFO 表に書き込まれます。 この表は、MYTABLESPACE 表スペースに作成されます。 ROWS_READ、 ROWS_WRITTEN、および STMT_TEXT エレメントに対してのみ列を作成します。 グループの他のエレメントは破棄されます。
- SUBSECTION グループからのすべてのデータは、MYDEPT.MYSUBSECTIONINFO 表に書き込まれます。 この表は、MYTABLESPACE 表スペースに作成されます。 この表は、START_TIME、STOP_TIME、および PARTIAL_RECORD 以外のすべての列を含みます。
- XACT グループからのすべてのデータは、XACT_BAR 表に書き込まれます。 表スペース情報が提供されていないので、 IN tablespace-name 節で記述された規則に基づいてシステムが選択した表スペースに、表が作成されます。 この表には、XACT グループにあるすべてのエレメントが含まれます。
- CONNHEADER または CONTROL 用の表は作成されないため、これらのグループのデータはすべて破棄されます。
CREATE EVENT MONITOR BAR FOR STATEMENTS, TRANSACTIONS WRITE TO TABLE STMT(TABLE MYDEPT.MYSTMTINFO IN MYTABLESPACE INCLUDES(ROWS_READ, ROWS_WRITTEN, STMT_TEXT)), STMT(TABLE MYDEPT.MYSTMTINFO IN MYTABLESPACE EXCLUDES(START_TIME, STOP_TIME, PARTIAL_RECORD)), XACT
