DB2

DB2でロックイベントとデッドロックイベントをモニターする方法

はじめに

DB2における、テーブルのロックやデッドロックの調査をしていきましょう。

DB2では、ロックイベントモニターを使用してこれらのイベントを詳細に追跡することができます。この記事では、初心者でも理解しやすいようにDB2のロックイベントモニターの設定と使用方法を解説します。

ロックイベントとは?

ロックイベントとは、複数のトランザクションが同じデータにアクセスしようとした際に発生するイベントです。これが原因でデータベースのパフォーマンスが低下したり、最悪の場合はデッドロックが発生することもあります。

現在のイベントモニター設定状況の確認

DB2では、ロックに関するイベントモニターは主にLOCKEVMONとして設定されます。つまりはDB2の表として保存されます。

イベントモニターがデータをどこに保存するかはTARGET_TYPEで決定され、Fはファイル、Uは未フォーマットのイベント表に保存されます。設定を確認するには以下のSQLコマンドを使用します:

db2 => SELECT SUBSTR(EVMONNAME,1,20) AS EVMON_NAME, TARGET_TYPE, OWNER FROM SYSCAT.EVENTMONITORS

EVMON_NAME           TARGET_TYPE OWNER                       
-------------------- ----------- ----------------------------
DB2DETAILDEADLOCK    F           DB2INST1                    
LOCKEVMON            U           DB2INST1                    

  2 レコードが選択されました。

参考:SYSCAT.EVENTMONITORS カタログ・ビュー
https://www.ibm.com/docs/ja/db2/11.5?topic=views-syscateventmonitors

結果を見ると、ロックイベントモニターLOCKEVMONは、「U」(LOCKEVMONという未フォーマット表)に取得されていることがわかります。ロックイベントが発生するとLOCKEVMONにロック情報が蓄積されていきます。

次は、LOCKEVMONの内容をテキストに出力して解析していきましょう。

イベントモニターの情報をフォーマットする

設定されているロックイベントモニターが未フォーマットで保存されている場合、db2evmonfmtツールを使用して情報をフォーマットします。

このツールは以下のコマンドで実行できます:

cd ${JAVA_HOME}
${JAVA_HOME}/bin/java db2evmonfmt -d [DBNAME] -u DB2INST1 -p [PASSWORD] -ue LOCKEVMON -ftext -hours 24 -type locktimeout | tee -a [出力ファイル名]

オプションの説明

${JAVA_HOME}/bin/javajavaのインストールディレクトリ、DB2と一緒にインストールしたJAVAをしていするとよい
-dデータベース名
-uユーザー ID
-pパスワード
-ue未フォーマット・イベント表の名前
-ftextテキスト文書にする
-hours指定した直近の数時間内に発生したすべてのイベントを表示
-typeイベント・タイプ
 ロックタイムアウト…locktimeout
 デッドロック…deadlock
|tee -adb2evmonfmtの結果をファイルに保存

参考:イベント・モニター情報へのアクセス方法
https://www.ibm.com/docs/ja/db2/11.5?topic=monitors-methods-accessing-event-monitor-information

参考:db2evmonfmt ツール
https://www.ibm.com/docs/ja/db2/11.5?topic=monitors-methods-accessing-event-monitor-information

ロック情報を解析してみる

こちらはIBMのサポートページに見方の記事がありましたので、そちらを紹介します

参考:デッドロック・イベントの見方
https://www.ibm.com/support/pages/db2-%E3%83%AD%E3%83%83%E3%82%AF%E3%83%BB%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88%E3%83%BB%E3%83%A2%E3%83%8B%E3%82%BF%E3%83%BC%E3%81%A7%E5%8F%96%E5%BE%97%E3%81%97%E3%81%9F%E6%83%85%E5%A0%B1%E3%81%AE%E8%A6%8B%E6%96%B9-%E3%83%87%E3%83%83%E3%83%89%E3%83%AD%E3%83%83%E3%82%AF%E3%83%BB%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88

参考:ロック・イベントの見方
https://www.ibm.com/support/pages/node/207149