システム・モニター 手引きおよび解説書
CREATE EVENT MONITOR ステートメントは、
データベース使用時に発生する特定のイベントを記録するモニターを定義します。
各イベント・モニターの定義では、
データベースがイベントを記録する場所も指定します。
効力範囲
このステートメントはアプリケーション・プログラムに組み込まれるか、
または対話式に発行されます。
このステートメントは、動的に準備できる実行可能ステートメントです。
しかし、バインド・オプション DYNAMICRULES BIND が適用されると、
ステートメントを動的に準備できません (SQLSTATE 42509)。
許可
許可 ID が保持する特権には、SYSADM または DBADM 権限 (SQLSTATE 42502)
のいずれかが含まれていなければなりません。
コマンド構文
>>-CREATE--EVENT--MONITOR--event-monitor-name--FOR-------------->
.-,-----------------------------------------------------------.
V |
>---------+-+-DATABASE----+--------------------------------------+--+>
| +-TABLES------+ |
| +-DEADLOCKS---+ |
| +-TABLESPACES-+ |
| '-BUFFERPOOLS-' |
'--+-CONNECTIONS--+---+------------------------------+-'
+-STATEMENTS---+ '-WHERE--| Event Condition |--'
'-TRANSACTIONS-'
.-MANUALSTART--.
>----WRITE--TO--+-PIPE--pipe-name---------------------+---+--------------+>
'-FILE--path-name--| File Options |--' '-AUTOSTART----'
.-LOCAL--.
>-----+-----------------------+---+--------+-------------------->
'-ON NODE--node-number--' '-GLOBAL-'
.-AND | OR------------------------------------------------------------.
V |
>--- Event Condition-----+-----+--+--+-APPL_ID---+---+-=----------+---comparison-string--+--+-
'-NOT-' | +-AUTH_ID---+ | (1) | |
| '-APPL_NAME-' +-<>---------+ |
| +->----------+ |
| | (1) | |
| +->=---------+ |
| +-<----------+ |
| | (1) | |
| +-<=---------+ |
| +-LIKE-------+ |
| '-NOT--LIKE--' |
'-(Event Condition)------------------------------------'
注:
- これらの演算子の他の形式もサポートされています。
コマンド・パラメーター
- event-monitor-name
- イベント・モニターの名前です。これは一部から成る名前で、 SQL 識別子
(順番または区切り) です。event-monitor-name は、 カタログ (SQLSTATE
42710) の中に存在しているイベント・モニターを識別してはなりません。
- FOR
- 記録するイベントのタイプを伝えます。
- DATABASE
- 最後のアプリケーションがデータベースから切断するときに、
イベント・モニターがデータベース・イベントを記録するように指定します。
- TABLES
- 最後のアプリケーションがデータベースから切断するときに、
イベント・モニターが活動状態のそれぞれの表の表イベントを記録するように指定します。
活動状態の表とは、そのデータベースへの最初の接続以降に変更された表です。
- DEADLOCKS
- デッドロックが発生したときは常に、
イベント・モニターがデッドロックを記録するように指定します。
- TABLESPACES
- 最後のアプリケーションがデータベースから切断するときに、
イベント・モニターが各表スペースの表スペース・イベントを記録するよう指定します。
- BUFFERPOOLS
- 最後のアプリケーションがデータベースから切断するときに、
イベント・モニターがバッファー・プール・イベントを記録するよう指定します。
- CONNECTIONS
- アプリケーションがデータベースから切断するときに、
イベント・モニターが接続イベントを記録するよう指定します。
- STATEMENTS
- SQL ステートメントが実行を終了するときには常に、
イベント・モニターがステートメント・イベントを記録するよう指定します。
- TRANSACTIONS
- トランザクションが完了するときはいつでも
(つまり、コミットまたはロールバック操作があるときはいつでも)、
イベント・モニターがトランザクション・イベントを記録するよう指定します。
- WHERE event condition
- CONNECTION、STATEMENT、 または TRANSACTION
イベントを発生させる接続を判別するフィルターを定義します。
特定の接続に対してイベント条件の結果が TRUE である場合、
その接続は要求されたイベントを生成します。
この文節は、WHERE 文節の特殊形式です。
標準的な探索条件と混同しないでください。
あるアプリケーションが特定のイベント・モニターのイベントを生成するかどうか判別するために、
以下のものについて WHERE 文節が評価されます。
- イベント・モニターが最初にオンになったとき、
活動状態のそれぞれの接続について。
- その後は、データベースへの新しい接続について (それぞれの接続時に)。
WHERE 文節は、各イベントごとには評価されません。
WHERE 文節が指定されない場合、
指定したイベント・タイプのすべての接続がモニターされます。
- APPL_ID
- 各接続が CONNECTION、STATEMENT、または TRANSACTION イベント
(のうち指定したもの) を生成するかどうかを判別するために、
各接続のアプリケーション ID を comparison-string
と比較するよう指定します。
- AUTH_ID
- 各接続が CONNECTION、STATEMENT または TRANSACTION イベント
(のうち指定したもの) を生成するかどうかを判別するために、 各接続の許可 ID を
comparison-string と比較するよう指定します。
- APPL_NAME
- 各接続が CONNECTION、STATEMENT または TRANSACTION イベント
(のうち指定したもの) を生成するかどうかを判別するために、
各接続のアプリケーション・プログラム名を comparison-string
と比較するよう指定します。
アプリケーション・プログラム名は、最後のパス区切り文字に続く、
アプリケーション・プログラム・ファイル名の最初の 20 バイトです。
- comparison-string
- データベースに接続している各アプリケーションの APPL_ID、 AUTH_ID、または
APPL_NAME と比較されるストリング。 comparison-string
は、ストリング定数でなければなりません (つまり、
ホスト変数およびその他のストリング式は使用できません)。
- WRITE TO
- データの宛先を伝えます。
- PIPE
- イベント・モニター・データの宛先が名前付きパイプであることを指定します。
イベント・モニターは、データを単一のストリームとしてパイプに書き込みます
(つまり、長さが無限の単一のファイルのように扱います)。
データをパイプに書き込み中に、
イベント・モニターはブロック化書き込みを実行することはありません。
パイプ・バッファーに空きがない場合、 イベント・モニターはデータを廃棄します。
データの脱落が絶対に起こらないようにしたい場合は、
モニター・アプリケーションの側でデータ読み取り速度を上げる必要があります。
- pipe-name
- イベント・モニターがデータを書き込むパイプ名 (AIX では FIFO 名)。
パイプの命名規則はプラットフォームで固有です。 UNIX
オペレーティング・システム上では、パイプ名はファイル名のように扱われます。
このため相対パイプ名が使用でき、相対パス名のように扱われます (下記
path-name を参照してください)。 しかし、OS/2 や Windows 95 および
Windows NT では、パイプ名の特殊構文があります。 このため、OS/2 や Windows 95
および Windows NT では、絶対パイプ名が必要です。
パイプの存在は、イベント・モニターの作成時には検査されません。
イベント・モニターが活動化されるときに、
読み取りに使えるよう、パイプを作成してオープンしておくのは、
モニター・アプリケーションの側の責任です。
この時点でパイプが使用できない場合は、
イベント・モニターが自動的にオフになり、エラーが記録されます。
(つまり、AUTOSTART
オプションの結果としてデータベースの開始時にイベント・モニターが活動化された場合、
イベント・モニターはシステム・エラー・ログにエラーを記録します。)
イベント・モニターが SET EVENT MONITOR STATE SQL
ステートメントによって活動化された場合、 そのステートメントは失敗します
(SQLSTATE 58030)。
- FILE
- イベント・モニター・データの宛先がファイル (またはファイル・セット)
であることを示します。 イベント・モニターは、データのストリームを、 一連の 8
文字の番号付きファイルに拡張子 "evt" を付けて書き出します。
(たとえば、00000000.evt、00000001.evt、
00000002.evt、...
となります)。データを小さく分割した場合でも、 全体を 1
つの論理ファイルとみなす必要があります (つまり、
データ・ストリームの開始はファイル 00000000.evt の最初のバイトであり、
データ・ストリームの終了はファイル nnnnnnnn.evt 内の最後のバイトです)。
各ファイルの最大サイズ、およびファイルの最大数を定義することができます。
イベント・モニターは、 1 つのイベント・レコードを 2
つのファイルにまたがって分割することはありません。
しかし、関連する複数のレコードを 2
つの異なるファイルに書き込むことはあります。
このデータを使用するアプリケーションは、
イベント・ファイルを処理する間、その関連情報を追跡している必要があります。
- path-name
- イベント・モニターがイベント・ファイル・データを書き込むディレクトリーの名前。
パスはサーバーから認識可能でなければなりませんが、
パス自体は別の区分またはノードにあっても差し支えありません (たとえば、 UNIX
ベースのシステムでは、NFS でマウントされたファイルも使用できます)。
path-name が指定されるとき、
ストリング定数を使用しなければなりません。
ディレクトリーは、CREATE EVENT MONITOR 時に存在している必要はありません。
しかし、イベント・モニターが活動化されたときに、
宛先パスが存在するかどうか検査されます。
その時点で宛先パスが存在しない場合は、 エラー (SQLSTATE 428A3) が発生します。
絶対パス (AIX ではルート・ディレクトリーで始まるパス、 OS/2 や Windows 95
および Windows NT ではディスク ID で始まるパス)
を指定する場合、指定したパスがそのまま使われます。相対パス
(ルートから始まっていないパス) が指定されている場合、
データベース・ディレクトリーの DB2EVENT
ディレクトリーに対する相対的なパスが使われます。
相対パスが指定された場合、 これを絶対パスに変換するために DB2EVENT
ディレクトリーが使われます。
このようにして、絶対パスと相対パスの間に違いはなくなります。 絶対パスは
SYSCAT.EVENTMONITORS カタログ視点に記録されます。
同じ宛先パスを持つ 2 つ以上のイベント・モニターを指定することができます。
ただし、それらのイベント・モニターの 1 つがいったん活動化されると、
宛先ディレクトリーが空でないかぎり、
他のいずれのイベント・モニターも活動化することができません。
- File Options
- ファイル形式のオプションを指定します。
- MAXFILES NONE
- イベント・モニターが作成するイベント・ファイルの数に制限がないことを指定します。
これは省略時の値です。
- MAXFILES number-of-files
- 特定のイベント・モニターについて、
任意の時点で存在するイベント・モニター・ファイルの数を制限することを指定します。
イベント・モニターがファイルをもう 1 つ作成する必要があるときは、
ディレクトリー内の .evt ファイルの数が number-of-files
より少ないかどうかを確認します。すでにこの限界に達している場合、
イベント・モニターはオフになります。
アプリケーションが、
イベント・ファイルを書き込んでからそれをディレクトリーから除去する場合は、
イベント・モニターが作成できるファイルの合計数が number-of-files
を超えてもかまいません。このオプションは、イベント・データが指定されたディスク・スペースの量を超えないようにするために備えられています。
- MAXFILESIZE pages
- 各イベント・モニター・ファイルに制限を設けることを指定します。
イベント・モニターがファイルに新しいイベント・レコードを書き込むときは、
ファイルが pages (4K ページ単位) より大きくなるかどうか検査します。
書き込み後のファイルが大きすぎると予想されれば、
イベント・モニターは次のファイルに切り替えます。
このオプションの省略時値は次のとおりです。
- OS/2、Windows 95 および Windows NT - 4K ページが 200
- UNIX - 4K ページが 1000
ページの数は、最低でもイベント・バッファー・サイズ (ページ単位)
より大きくなければなりません。 この要求を満たしていない場合、エラー (SQLSTATE
428A4) が発生します。
- MAXFILESIZE NONE
- ファイルのサイズには制限を設けないことを指定します。 MAXFILESIZE NONE
を指定する場合は、MAXFILES 1 も指定する必要があります。
このオプションは、特定のイベント・モニターのすべてのイベント・データが 1
つのファイルに入れられることを意味します。 この場合、イベント・ファイルは
00000000.evt だけになります。
- BUFFERSIZE pages
- イベント・モニター・バッファーのサイズを (4K ページの単位で) 指定します。
イベント・モニターのパフォーマンスを改善するために、イベント・モニター・ファイルのすべての入出力をバッファーに入れます。バッファーが大きくなると、それだけイベント・モニターが実行する入出力は少なくなります。活動率の高いイベント・モニターには、
活動率が比較的低いものよりも大きなバッファーが必要です。
モニターが開始すると、指定されたサイズのバッファーが 2 つ割り当てられます。
イベント・モニターは二重バッファリングを使って非同期入出力を可能にします。
このオプションが指定されない場合、 バッファーの最小サイズ (省略時のサイズ)
は、 4 ページ (つまり 2 つのバッファーのそれぞれのサイズは 16 K) です。
バッファーの最大サイズは、 モニターのヒープ (MON_HEAP)
のサイズによって制限されます。
バッファーはこのヒープから割り当てられるからです。
同時に多数のイベント・モニターを使用する場合、 MON_HEAP
データベース構成パラメーターのサイズを大きくしてください。
また、データをパイプに書き込むイベント・モニターにも、 サイズが 1
ページの内部的な (構成不能な) バッファーが 2 つあります。
これらのバッファーもまた、 モニター・ヒープ (MON_HEAP) から割り当てられます。
パイプ宛先のある活動状態の各イベント・モニターに対しては、
データベース・ヒープのサイズを 2 ページずつ増やしてください。
- BLOCKED
- イベントを生成する各エージェントが、
どちらのイベント・バッファーも満杯であると判別した場合に、
イベント・バッファーからディスクへの書き出しまで待つよう指定します。
イベント・データが失われないようにするには、BLOCKED を選択してください。
これが省略時のオプションです。
- NONBLOCKED
- イベントを生成する各エージェントが、
どちらのイベント・バッファーも満杯であると判別した場合に、
イベント・バッファーからディスクへの書き出しを待たないよう指定します。
NONBLOCKED イベント・モニターの場合、 BLOCKED
イベント・モニターほどデータベースの動作が遅くなることはありません。
しかし、NONBLOCKED イベント・モニターは、
活動率の高いシステムではデータの脱落という影響を受けます。
- APPEND
- イベント・モニターをオンにしたときにイベント・データ・ファイルがすでに存在している場合、
イベント・モニターは新規のイベント・モニターをデータ・ファイルの既存のストリームに追加します。
イベント・モニターが再び活動状態になると、
イベント・ファイルへの書き込みを再開し、
オフにならなかった場合と同じように動作します。 APPEND
は省略時のオプションです。
(新しく作成されたイベント・モニターがイベント・データを書き込む)
宛先ディレクトリー内に、イベント・データがすでに存在する場合、 CREATE EVENT
MONITOR 時の APPEND オプションは適用されません。
- REPLACE
- イベント・モニターがオンになった時にイベント・データ・ファイルがすでに存在する場合、
イベント・モニターがすべてのイベント・ファイルを消去し、 ファイル
00000000.evt にデータを書き込み始めるよう指定します。
- MANUALSTART
- データベースが始動するたびに、
自動的にイベント・モニターを開始しないよう指定します。 MANUALSTART
オプションを指定したイベント・モニターは、 SET EVENT MONITOR STATE
ステートメントを使って手動で活動化する必要があります。
これが省略時のオプションです。
- AUTOSTART
- データベースを始動するたびに、
イベント・モニターが自動的に開始されるよう指定します。
- ON NODE
- 特定の区分を示すキーワードを指定します。
- node-number
- イベント・モニターが実行してイベントを書き込む区分番号を指定します。
モニター効力範囲を GLOBAL と定義すると、
すべての区分は指定した区分番号に報告します。 物理的には、I/O
構成要素は指定した区分で実行され、 この区分の /tmp/dlocks
ディレクトリーにレコードが書き込まれます。
- GLOBAL
- イベント・モニターはすべての区分から報告します。 DB2
ユニバーサル・データベース バージョン 7 の区分データベースの場合は、
デッドロック・イベント・モニターのみが GLOBAL として定義できます。
グローバル・イベント・モニターは、
システム内のすべてのノードで起きたデッドロックを報告します。
- LOCAL
- イベント・モニターは実行している区分にのみ報告します。
これにより、データベース活動の部分的なトレースが可能です。これは省略時の値です。
サンプル・プログラム
- 各イベント・タイプ (DATABASE、TABLES、DEADLOCK、...) は、
特定のイベント・モニター定義で一度しか指定できません。
使用上の注意
- イベント・モニター定義は SYSCAT.EVENTMONITORS
カタログ視点に記録されます。 イベント自体は SYSCAT.EVENTS
カタログ視点に記録されます。
- データベース・モニターの使用方法、
およびパイプやファイルからのデータの解釈について、 詳しくはシステム・モニター 手引きおよび解説書 を参照してください。
例
例 1: 次の例では、SMITHPAY
というイベント・モニターが作成されます。
このイベント・モニターは、データベースのイベント・データと、 JSMITH という許可
ID の所有する PAYROLL アプリケーションが実行する SQL
ステートメントのイベント・データを収集します。 データは絶対パス
/home/jsmith/event/smithpay/ に追加されます。 最大で 25
個のファイルが作成されます。 各ファイルの最大長は、1 024 4K ページが
1 個分です。 ファイル I/O はブロック化されません。
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 (存在する場合) に追加します。
データベースが始動するたびにイベント・モニターも開始されます。 I/0
は省略時値によってブロック化されます。
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'
[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]