Question & Answer
Question
バージョン 9.7 以降のロック・イベント・モニターの設定方法について教えてください。
Answer
Db2 9.7 以降、新しいロック・イベント・モニター (CREATE EVENT MONITOR FOR LOCKING) を使用して、ロック・イベント・レポートを収集できます。
このイベント・データを使用してロック待機、ロック・タイムアウト、およびデッドロック問題を識別できます。
Db2 9.7 より前のバージョンデッドロックおよびロックタイムアウトイベントをモニターするには、DB2DETAILDEADLOCK イベント・モニター、DB2_CAPTURE_LOCKTIMEOUT レジストリー変数、および CREATE EVENT MONITOR FOR DEADLOCKS ステートメントが使用されていましたが、V9.7 以降これらの手法はすべて推奨されなくなりました。ロック・イベント・モニターの設定方法
ロック・イベントを収集するため、以下のいずれかを設定します。
どちらの設定にするかは、お客様の要件に合わせて選択してください。
<< 実行手順 >>
このイベント・データを使用してロック待機、ロック・タイムアウト、およびデッドロック問題を識別できます。
Db2 9.7 より前のバージョンデッドロックおよびロックタイムアウトイベントをモニターするには、DB2DETAILDEADLOCK イベント・モニター、DB2_CAPTURE_LOCKTIMEOUT レジストリー変数、および CREATE EVENT MONITOR FOR DEADLOCKS ステートメントが使用されていましたが、V9.7 以降これらの手法はすべて推奨されなくなりました。
ロック・イベント・モニターの設定方法
データベースごとに 1 つのロック・イベント・モニターを作成します。
ロック・イベントを収集するため、以下のいずれかを設定します。
- ロック・イベントに関するデータベース構成パラメーターの設定
- ワークロード単位 (CREATE/ALTER WORKLOAD) で取得したいロック・イベントを設定
どちらの設定にするかは、お客様の要件に合わせて選択してください。
<< 実行手順 >>
- 既存のデッドロック・イベント・モニター DB2DETAILDEADLOCK の除去
1-1. 該当のデータベースに接続し、既存のデッドロック・イベント・モニターが存在することを確認します。
出力例:$ db2 connect to SAMPLE データベース接続情報 データベース・サーバー = DB2/AIX64 11.5.8 SQL 許可 ID = DB2INST1 ローカル・データベース別名 = SAMPLE $ db2 "select substr(EVMONNAME,1,20) as EVMONNAME, TARGET_TYPE,substr(TARGET,1,20) as TARGET from syscat.eventmonitors" EVMONNAME TARGET_TYPE TARGET -------------------- ----------- -------------------- DB2DETAILDEADLOCK F db2detaildeadlock 1 レコードが選択されました。
1-2. 既存のデッドロック・イベント・モニターの非活動化と削除後、削除されたことを確認します。
出力例:$ db2 "set event monitor db2detaildeadlock state 0" DB20000I SQL コマンドが正常に完了しました。 $ db2 "drop event monitor db2detaildeadlock" DB20000I SQL コマンドが正常に完了しました。 $ db2 "select substr(EVMONNAME,1,20) as EVMONNAME, TARGET_TYPE,substr(TARGET,1,20) as TARGET from syscat.eventmonitors" EVMONNAME TARGET_TYPE TARGET -------------------- ----------- -------------------- 0 レコードが選択されました。
- イベント・モニターの作成、活動化
2-1. イベント・モニターを定義します。
CREATE EVENT MONITOR FOR LOCKING ステートメントを使用してロック・イベント・モニターを作成する必要があります。このモニターの名前と、ロック・イベント・データが書き込まれる未フォーマット・イベント表の名前を入力します。
以下の例では、lockevmon というロック・イベント・モニターを作成します。$ db2 create event monitor lockevmon for locking write to unformatted event table DB20000I SQL コマンドが正常に完了しました。
2-2. イベント・モニターが活動化されていることを確認します。
ロック・イベント・モニター lockevmon が活動化されていることを確認します。$ db2 "SELECT EVMONNAME, CASE WHEN EVENT_MON_STATE(EVMONNAME) = 0 THEN 'Inactive' WHEN EVENT_MON_STATE(EVMONNAME) = 1 THEN 'Active' END FROM SYSCAT.EVENTMONITORS" EVMONNAME 2 ----------------------------- -------- LOCKEVMON Active 1 レコードが選択されました。
もし 'Inactive' となっている場合は、以下のコマンドで有効化します。$ db2 set event monitor lockevmon state 1 DB20000I SQL コマンドが正常に完了しました。
-
イベント・モニターの設定
3-1. ロック・イベント・モニターを収集するためには、ロック・イベント・データをキャプチャーするイベントの種類を、データベース単位、もしくはワークロード単位で設定します。
データベース単位の場合、設定したデータベース上の全ての処理をモニターします。問題となる処理が特定されている場合は、ワークロード単位でモニターするレベルを指定できます。- データベース・レベル
データベース構成パラメーターの設定を設定することで、データをデータベース・レベルで収集し、すべての Db2 ワークロードに影響を与えます。動的に設定を変更するには、データベース接続が必要です。
ロック待機イベントの場合
SAMPLE データベースの mon_lockwait データベース構成パラメーターに HIST_AND_VALUES を設定、mon_lw_thresh データベース構成パラメーターに 10 秒を設定するには、以下のステートメントを発行します。db2 connect to sample db2 update db cfg using mon_lockwait hist_and_values db2 update db cfg using mon_lw_thresh 10000000
SAMPLE データベースの mon_locktimeout データベース構成パラメーターに HIST_AND_VALUES を設定するには、以下のコマンドを発行します。db2 connect to sample db2 update db cfg using mon_locktimeout hist_and_values
SAMPLE データベースの mon_deadlock データベース構成パラメーターに HIST_AND_VALUES を設定するには、以下のコマンドを発行します。db2 connet to sample db2 update db cfg using mon_deadlock hist_and_values
- ワークロード・レベル
※ (Db2 11.1 まで) ワークロード管理をするためには、Db2 Enterprise Server Edition の有償フィーチャー (IBM Db2 Performance Optimization Feature for Enterprise Server Edition、もしくは Db2 Advanced Enterprise Server Edition) が必要です。
Db2 のエディションごとのフィーチャーおよび機能
新しいワークロードを作成するには、CREATE WORKLOAD ステートメントを使用します。
例: アプリケーション (Application Name:db2bp) からサブミットされた要求を、finance という名前のワークロードに関連づけます。$ db2 "CREATE WORKLOAD finance APPLNAME ('db2bp')" DB20000I SQL コマンドが正常に完了しました。
ロック待機イベントの場合
FINANCE ワークロードで 5 秒経過後に獲得されたロックのロック待機データを収集するには、以下のコマンドを発行します。db2 ALTER WORKLOAD finance COLLECT LOCK WAIT DATA WITH HISTORY AND VALUES FOR LOCKS WAITING MORE THAN 5 SECONDS
FINANCE アプリケーションのロック・タイムアウト・データを収集するには、以下のコマンドを発行します。db2 ALTER WORKLOAD finance COLLECT LOCK TIMEOUT DATA WITH HISTORY
FINANCE アプリケーションのデータを収集するには、以下のコマンドを発行します。db2 ALTER WORKLOAD finance COLLECT DEADLOCK DATA WITH HISTORY
- データベース・レベル
- 未フォーマット・イベント表の情報取得
以下のいずれかの方法で、ロック・イベント・レポートを取得します。 取得したレポートを分析し、ロック・イベントに関する問題の理由を判別して、問題を解決します。- XML パーサー・ツール db2evmonfmt を使用して、フラット・テキスト・レポートを生成します。
java db2evmonfmt -d <db_name> -ue <table_name> -ftext -u <userid> -p <password>
- EVMON_FORMAT_UE_TO_XML 表関数を使用して、XML 文書を取得します。
- EVMON_FORMAT_UE_TO_TABLES プロシージャーを使用して、データをリレーショナル表に出力します。
- XML パーサー・ツール db2evmonfmt を使用して、フラット・テキスト・レポートを生成します。
- イベント・モニターの停止
ロック・イベント・モニターを非活動化します。$ db2 set event monitor lockevmon state 0 DB20000I The SQL command completed successfully.
- データベース・レベル
※ 動的にデータベース構成パラメーターの設定を変更するには、データベース接続が必要です。
ロック待機イベントの場合
SAMPLE データベースの mon_lockwait データベース構成パラメーターをデフォルトの NONE 入力データ値を指定して再設定し、mon_lw_thresh データベース構成パラメーターを再設定してデフォルト値の 5 秒に戻すには、以下のコマンドを発行します。db2 connect to sample db2 update db cfg using mon_lockwait none db2 update db cfg using mon_lw_thresh 5000000
SAMPLE データベースの mon_locktimeout データベース構成パラメーターをデフォルトの NONE 入力データ値を指定して再設定するには、次のコマンドを発行します。db2 connect to sample db2 update db cfg using mon_locktimeout none
SAMPLE データベースの mon_deadlock データベース構成パラメーターをデフォルトの WITHOUT_HIST 入力データ値を指定して再設定するには、次のコマンドを発行します。db2 connect to sample db2 update db cfg using mon_deadlock without_hist
- ワークロード・レベル
ロック待機イベントの場合db2 ALTER WORKLOAD finance COLLECT LOCK WAIT DATA NONE
db2 ALTER WORKLOAD finance COLLECT LOCK TIMEOUT DATA NONE
db2 ALTER WORKLOAD finance COLLECT DEADLOCK DATA NONE
- データベース・レベル
運用上の考慮点
上の手順でロック・イベント・モニターを作成した場合、イベントはイベント・モニター名と同名のイベント表に記録されます。イベント表は自動的に整理されないため、以下のような手法でメンテナンスが必要です。
- イベント表の確認方法
データベースに接続して以下の SQL でイベント表名を判別できます。db2 "select TABSCHEMA,TABNAME from syscat.eventtables where EVMONNAME='<イベント・モニター名>'"
- イベント表の整理方法
DELETE ステートメントを発行して不要なイベント削除できます。たとえば以下の SQL で直近1か月より古いデータを削除できます。db2 "delete from <イベント表名> where EVENT_TIMESTAMP < current timestamp - 1 month"
[Db2] ロック・イベント・モニターで取得した情報の db2evmonfmt ツールを使わないフォーマット方法
[Db2] ロック・イベント・モニターで取得した情報の見方 (ロック待機イベント)
[Db2] ロック・イベント・モニターで取得した情報の見方 (ロック・タイムアウト・イベント)
[Db2] ロック・イベント・モニターで取得した情報の見方 (デッドロック・イベント)
[Db2] パスポート・アドバンテージによく寄せられる質問
Db2 デザインガイド ロックの基礎 V9.7対応
データベース・ロックのモニター
mon_locktimeout - モニター用ロック・タイムアウト構成パラメーター
mon_deadlock - モニター用デッドロック構成パラメーター
mon_lockwait - モニター用ロック待機構成パラメーター
mon_lw_thresh - モニター用ロック待機しきい値構成パラメーター
EVMON_FORMAT_UE_TO_TABLES プロシージャー - XML 文書をリレーショナル表へ移動する
[Db2] ロック・イベント・モニターで取得した情報の見方 (ロック待機イベント)
[Db2] ロック・イベント・モニターで取得した情報の見方 (ロック・タイムアウト・イベント)
[Db2] ロック・イベント・モニターで取得した情報の見方 (デッドロック・イベント)
[Db2] パスポート・アドバンテージによく寄せられる質問
Db2 デザインガイド ロックの基礎 V9.7対応
データベース・ロックのモニター
mon_locktimeout - モニター用ロック・タイムアウト構成パラメーター
mon_deadlock - モニター用デッドロック構成パラメーター
mon_lockwait - モニター用ロック待機構成パラメーター
mon_lw_thresh - モニター用ロック待機しきい値構成パラメーター
EVMON_FORMAT_UE_TO_TABLES プロシージャー - XML 文書をリレーショナル表へ移動する
[{"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 - SSEPGG"},"ARM Category":[{"code":"a8m500000008PmIAAU","label":"Monitors-\u003EEvent Monitor"}],"ARM Case Number":"","Platform":[{"code":"PF025","label":"Platform Independent"}],"Version":"10.1.0;10.5.0;11.1.0;11.5.0;9.7.0"}]
Was this topic helpful?
Document Information
Modified date:
25 August 2023
UID
swg21592430