| ページ一覧 | ブログ | twitter |  書式 | 書式(表) |

MyMemoWiki

DB2 ロック・イベントのモニター

提供: MyMemoWiki
2020年2月15日 (土) 08:01時点におけるPiroto (トーク | 投稿記録)による版
ナビゲーションに移動 検索に移動

目次

DB2 ロック・イベントのモニター

[[DB2 v10.1][Database]]

次のような状況下では、ロック・イベント・データを収集する

  • MON_GET_WORKLOAD 表関数を使用したところ、ロック待機の値がいつもより長い。
  • アプリケーションが「ロック・タイムアウトのために、トランザクションがロールバックされました」という内容の -911 SQL 戻りコードを理由コード 68 と共に管理通知ログに戻す
  • 管理通知ログにデッドロック・イベント・メッセージ

MON_GET_WORKLOAD 表関数 - ワークロード・メトリックの取得

SELECT varchar(workload_name,30) as workload_name, 
       sum(lock_wait_time) as total_lock_wait_time, 
       sum(lock_waits) as total_lock_waits, 
       sum(lock_timeouts) as total_lock_timeouts, 
       sum(lock_escals) as total_lock_escals 
FROM TABLE(MON_GET_WORKLOAD(,-2)) AS t 
GROUP BY workload_name 
ORDER BY total_lock_wait_time DESC
列抜粋
内容
DEADLOCKS deadlocks - デッドロック検出数
LOCK_ESCALS lock_escals - ロック・エスカレーション数
LOCK_TIMEOUTS lock_timeouts - ロック・タイムアウト数
LOCK_WAIT_TIME lock_wait_time - ロック待機中の時間
LOCK_WAITS lock_waits - ロック待機数
SELECT
  WORKLOAD_NAME,
  DEADLOCKS,
  LOCK_WAIT_TIME,
  LOCK_WAITS,
  LOCK_ESCALS,
  LOCK_TIMEOUTS
FROM TABLE(MON_GET_WORKLOAD(null,-2));

ロック・イベント・モニター

  • ロック・データを収集してロック競合状態の診断および修正作業を単純化するように設計
  • ロック・イベントの発生時に、それらのロック・イベントに関する説明情報をキャプチャー
  • ロック・イベントの原因となっているロック競合に関係した主要なアプリケーションを識別
    • ロック・リクエスター(エラーを受け取った、ロックを待機したアプリケーション)
    • ロック所有者
  • バイナリー・フォーマット、通常の表にイベント情報を書き込む

<blockquote>デッドロック・イベント・モニターは非推奨、機能は、ロック・イベント・モニターに統合</blockquote>

機能の有効化手順

CREATE EVENT MONITOR FOR LOCKING ステートメントを使用して LOCK EVENT モニターを作成

  • モニターの名前を入力
  • 出力形式として UE 表を使用する場合は、ロック・イベント・データが書き込まれる未フォーマット・イベント表の名前も入力
  • 出力に通常の表を使用するように選択した場合は、 デフォルトの表名が割り当てられます
バイナリー・データの扱い
  • db2evmonfmt Java アプリケーションを使用して XML またはテキスト文書に変換できる
  • EVMON_FORMAT_UE_TO_XML 表関数を使用して XML レポート文書にフォーマット
  • EVMON_FORMAT_UE_TO_TABLES プロシージャーを使用してリレーショナル表にフォーマット

ロック・イベント・データをキャプチャーするレベルを指定

ワークロード
  • 既存のワークロードを変更する
  • CREATE または ALTER WORKLOAD ステートメントを使用して新規ワークロードを作成する
  • ワークロード・レベルで、キャプチャーするロック・イベント・データのタイプ、およびロックに関係したアプリケーションの SQL ステートメント履歴および入力値を必要とするかどうかを指定

<blockquote>SQL ステートメント履歴および入力値のキャプチャーにより、プロセッサー時間、メモリー、およびストレージの使用量が増大しますが、 ロック問題を適切にデバッグするには、多くの場合このレベルの詳細情報が必要</blockquote>

データベース・レベルで収集し、すべての DB2 ワークロードに影響を与える
内容
mon_lockwait ロック待機イベントの生成を制御
mon_locktimeout ロック・タイムアウト・イベントの生成を制御
mon_deadlock ッドロック・イベントの生成を制御
mon_lw_thresh mon_lockwait のイベントが生成されるまでのロック待機時間を制御

ロック・イベント・データの収集とレポートの生成

手順

lockevmon というロック・イベント・モニターを作成

CREATE EVENT MONITOR lockevmon FOR LOCKING
  WRITE TO UNFORMATTED EVENT TABLE
  • イベント・モニターは前もって作成できます。また、ディスク・スペースが使い尽くされることを心配する必要はありません。
  • データベース・レベルまたはワークロード・レベルのデータ収集を活動化するまでは何も書き込まれません。
  • データ取得のための表へのアクセス時に進行中の作業によるハイパフォーマンス作業に対する妨害が最小になるように、表スペースとバッファー・プールをセットアップするようにします

ロック・イベント・モニター lockevmon を活動化

SET EVENT MONITOR lockevmon STATE 1

ロック・イベント・データ収集を使用可能

ワークロード・レベル
  • COLLECT 節の 1 つを使用して ALTER WORKLOAD ステートメントを発行
  • COLLECT 節で WITH HISTORY オプションを指定
すべてのワークロード
  • データベース構成パラメーターを設定すると、データベース・レベルのロック・イベント・データ収集に影響を与え、すべてのワークロードが影響
ロック待機イベントの場合(COLLECT LOCK WAIT DATA)
    • FINANCE アプリケーションについては 5 秒経過後に獲得されたロックのロック待機データを収集
    • PAYROLL アプリケーションについては 10 秒経過後に獲得されたロックのロック待機データを収集
ALTER WORKLOAD finance COLLECT LOCK WAIT DATA WITH HISTORY AND VALUES
   FOR LOCKS WAITING MORE THAN 5 SECONDS
ALTER WORKLOAD payroll COLLECT LOCK WAIT DATA 
   FOR LOCKS WAITING MORE THAN 10 SECONDS WITH HISTORY
    • SAMPLE データベースの mon_lockwait データベース構成パラメーターを HIST_AND_VALUES 入力データ値を指定して設定
    • mon_lw_thresh データベース構成パラメーターを 10 秒に設定
db2 update db cfg for sample using mon_lockwait hist_and_values
db2 update db cfg for sample using mon_lw_thresh 10000000
ロック・タイムアウト・イベントの場合(COLLECT LOCK TIMEOUT DATA)
    • FINANCE および PAYROLL アプリケーションのロック・タイムアウト・データを収集する
ALTER WORKLOAD finance COLLECT LOCK TIMEOUT DATA WITH HISTORY
ALTER WORKLOAD payroll COLLECT LOCK TIMEOUT DATA WITH HISTORY
    • SAMPLE データベースの mon_locktimeout データベース構成パラメーターを HIST_AND_VALUES 入力データ値を指定して設定
db2 update db cfg for sample using mon_locktimeout hist_and_values
デッドロック・イベントの場合(COLLECT DEADLOCK DATA)
    • FINANCE および PAYROLL アプリケーションのデータを収集
ALTER WORKLOAD finance COLLECT DEADLOCK DATA WITH HISTORY
ALTER WORKLOAD payroll COLLECT DEADLOCK DATA WITH HISTORY
    • SAMPLE データベースの mon_deadlock データベース構成パラメーターを HIST_AND_VALUES 入力データ値を指定して設定
db2 update db cfg for sample using mon_deadlock hist_and_values

ロッキング・イベント・レポートを取得

  • ワークロードの再実行とデータベースへの接続
XML パーサー・ツール db2evmonfmt を使用
  • C:\IBM\SQLLIB\samples\java\jdbc\db2evmonfmt.java から適当なディレクトリでコンパイル
java db2evmonfmt -d db_name -ue table_name -ftext -u user_id -p password
SELECT evmon.xmlreport FROM TABLE ( EVMON_FORMAT_UE_TO_XML( 'LOG_TO_FILE',FOR EACH ROW OF ( SELECT * FROM lockevmon  ORDER BY EVENT_ID, EVENT_TIMESTAMP, EVENT_TYPE, MEMBER ))) AS evmon

未フォーマット・イベント表からデータを抽出するルーチン

EVMON_FORMAT_UE_TO_TABLES
EVMON_FORMAT_UE_TO_XML

ロック・データ収集をオフ

ロック待機イベントの場合
ALTER WORKLOAD finance COLLECT LOCK WAIT DATA NONE
ALTER WORKLOAD payroll COLLECT LOCK WAIT DATA NONE
db2 update db cfg for sample using mon_lockwait none
db2 update db cfg for sample using mon_lw_thresh 5000000
ロック・タイムアウト・イベントの場合
ALTER WORKLOAD finance COLLECT LOCK TIMEOUT DATA NONE
ALTER WORKLOAD payroll COLLECT LOCK TIMEOUT DATA NONE
db2 update db cfg for sample using mon_locktimeout none
デッドロック・イベントの場合
ALTER WORKLOAD finance COLLECT DEADLOCK DATA NONE
ALTER WORKLOAD payroll COLLECT DEADLOCK DATA NONE
db2 update db cfg for sample using mon_deadlock without_hist