Question & Answer
Question
バージョン 9.7 以降のロック・イベント・モニターで取得した情報のフォーマットの方法について教えてください。
Answer
※ ロック・イベント・モニターの設定方法は [Db2] ロック・イベント・モニターの設定方法を参照してください。
ロック・イベント・モニターで取得したデータは、バイナリー形式で "未フォーマット・イベント表" に格納されるため、以下のいずれかの方法でフォーマットする必要があります。
ロック・イベント・モニターで取得したデータは、バイナリー形式で "未フォーマット・イベント表" に格納されるため、以下のいずれかの方法でフォーマットする必要があります。
- EVMON_FORMAT_UE_TO_XML プロシージャーを使用する
未フォーマット・イベント表から XML 文書にデータを抽出します。
注意:
部分的な 表(不完全な) イベントが未フォーマット(UE) に存在する場合、EVMON_FORMAT_UE_TO_XML を実行すると、メッセージ (SQL443N) が戻されます。不完全なイベントは、イベント・レコード全体を UE 表に挿入できるようになる前にエージェントが処理を完了すると、発生することがあります。
特にパーティション・データベース環境でロック・イベントが発生した場合に、この状況が発生する可能性があります。例えば、LOCKWAIT しきい値を超えたとき、ロックの保有者に関する詳細が UE 表に書き込まれます。しかし、同じオブジェクトに対するロックを待機しているエージェントに関する詳細は、ロックがタイムアウトになるか、またはウェイターがロックを獲得するまで取り込まれません。ロックを待機しているエージェントがその情報を書き込む前に EVMON_FORMAT_UE_TO_XML が実行された場合、ロックに関する情報の一部しか UE 表に存在しない可能性があります。
LOG_PARTIAL_EVENTS オプションを指定すると、UE 表の中の不完全なイベントは別個の XML 文書に書き込まれます。また、不完全なイベントが発生したことを示すメッセージが db2diag.log に書き込まれます。メッセージには、不完全なイベントの詳細を含む XML 文書のファイル名が明記されます。生成される XML 文書は、db2evmonfmt ツールを使用してフォーマットできます。 - db2evmonfmt を使用する
db2evmonfmt で、テキスト・レポートまたはフォーマット済み XML 文書のどちらの形式で出力するかを指定してフォーマットします。なお、db2evmonfmt は内部的に EVMON_FORMAT_UE_TO_XML を呼び出しています。
注意:
db2evmonfmt ツールは、Java ソース・コードとして提供されます。使用する前に <install_path>/samples/java/jdbc/db2evmonfmt.java に記述されている手順に従って、事前にツールをセットアップおよびコンパイルする必要があります。なお samples はアプリケーション開発ツールの一部です。
[Db2] アプリケーション開発ツールのインストール方法
実行例:
実行ユーザーはインスタンス・オーナーで実行してください。Windows 環境では「DB2 コマンド・ウィンドウ - 管理者」から実行してください。手順 1 から 4 は db2evmonfmt をコンパイルするため一度だけ実施します。- ソース・ファイルを作業ディレクトリーにコピーします。
$ mkdir $HOME/work $ cp $HOME/sqllib/samples/java/jdbc/db2evmonfmt.java $HOME/work $ cp $HOME/sqllib/samples/java/jdbc/*.xsl $HOME/work
- PATH 環境変数を変更します。永続化が必要な場合は .profile などに設定します。
- Linux/UNIX 環境
$ export PATH=$HOME/sqllib/java/jdk64/bin:$HOME/sqllib/lib:$PATH
- Windows 環境
C:\>set PATH=%db2path%\java\jdk\bin;%path%
- Linux/UNIX 環境
- LD_LIBRARY_PATH を変更します。永続化が必要な場合は .profile などに設定します。
(Windows 版では設定は不要です。)$ export LD_LIBRARY_PATH=$HOME/sqllib/lib:$LD_LIBRARY_PATH
- db2evmonfmt.java をコンパイルします。
$ cd $HOME/work $ javac db2evmonfmt.java
- db2evmonfmt を実行します。 例: SAMPLE データベースの LOCK 表から、直近 24 時間以内に発生したロック・タイムアウトのデータをフォーマットします。
$ java db2evmonfmt -d sample -ue LOCK -ftext -hours 24 -type locktimeout
- ソース・ファイルを作業ディレクトリーにコピーします。
運用上の考慮点
db2evmonfmt を実行しただけでは、不完全なイベントはフォーマットされません。
未フォーマット表に不完全なイベントが存在する場合、以下の手順で不完全なイベントを個別にフォーマットできます。
db2evmonfmt を実行しただけでは、不完全なイベントはフォーマットされません。
未フォーマット表に不完全なイベントが存在する場合、以下の手順で不完全なイベントを個別にフォーマットできます。
- 1. 未フォーマット表 (LOCK) から不完全なイベントを XML ファイルに出力します。
$ db2 "SELECT * FROM TABLE (EVMON_FORMAT_UE_TO_XML('LOG_PARTIAL_EVENTS',FOR EACH ROW OF ( SELECT * FROM LOCK ORDER BY EVENT_ID, EVENT_TIMESTAMP, EVENT_TYPE, MEMBER ))) AS evmon"
- db2diag.log から出力された XML ファイルの場所を確認します。
$ db2diag -g funcname:=LogPartialEvents 2017-08-23-14.14.23.458973+540 E9879A668 LEVEL: Warning PID : 76979808 TID : 8972 PROC : db2sysc INSTANCE: db2inst1 NODE : 000 DB : SAMPLE EDUID : 8972 EDUNAME: db2agent (SAMPLE) FUNCTION: DB2 UDB, database application extension for system monitor, monLockEventFormatter::LogPartialEvents, probe:768 MESSAGE : Partial (incomplete) event with XMLID 'db2LockEvent_1_LOCKTIMEOUT_2017-08-22-15.50.49.220847' has been written to file. DATA #1 : String, 95 bytes /home/db2inst1/sqllib/db2dump/evmon/db2LockEvent_1_LOCKTIMEOUT_2017-08-22-15.50.49.220847.xml
- DATA #1 に記載されたファイルを、db2evmonfmt でフォーマットします。
$ java db2evmonfmt -f /home/db2inst1/sqllib/db2dump/evmon/db2LockEvent_1_LOCKTIMEOUT_2017-08-22-15.50.49.220847.xml -ftext
[{"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"},"ARM Category":[{"code":"a8m500000008PmIAAU","label":"Monitors-\u003EEvent Monitor"},{"code":"a8m500000008PmMAAU","label":"Performance-\u003ELocks"}],"ARM Case Number":"","Platform":[{"code":"PF025","label":"Platform Independent"}],"Version":"All Versions"}]
Was this topic helpful?
Document Information
Modified date:
25 August 2023
UID
swg21592437