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

MyMemoWiki

差分

ナビゲーションに移動 検索に移動
編集の要約なし
==[[DB2 ロック・イベントのモニター]]==
[[DB2 v10.1]] | [[Database]] |
====次のような状況下では、ロック・イベント・データを収集する====
*MON_GET_WORKLOAD MON_GET_WO[[R]]KLOAD 表関数を使用したところ、ロック待機の値がいつもより長い。*アプリケーションが「ロック・タイムアウトのために、トランザクションがロールバックされました」という内容の アプリケーションが「ロック・タイムアウトのために、[[トランザクション]]がロールバックされました」という内容の -911 SQL 戻りコードを理由コード 68 と共に管理通知ログに戻す
*管理通知ログにデッドロック・イベント・メッセージ
===MON_GET_WORKLOAD MON_GET_WO[[R]]KLOAD 表関数 - ワークロード・メトリックの取得===
*http://www-01.ibm.com/support/knowledgecenter/SSEPGG_10.1.0/com.ibm.db2.luw.sql.rtn.doc/doc/r0053940.html?lang=ja
*メンバー全体で集約し、ロック待機時間の長い順に、ワークロードごとのロック情報を表示します。
sum(lock_timeouts) as total_lock_timeouts,
sum(lock_escals) as total_lock_escals
FROM F[[R]]OM TABLE(MON_GET_WORKLOADMON_GET_WO[[R]]KLOAD('',-2)) AS t GROUP G[[R]]OUP BY workload_name ORDER O[[R]]DE[[R]] BY total_lock_wait_time DESC
=====列抜粋=====
SELECT
WORKLOAD_NAMEWO[[R]]KLOAD_NAME,
DEADLOCKS,
LOCK_WAIT_TIME,
LOCK_ESCALS,
LOCK_TIMEOUTS
FROM F[[R]]OM TABLE(MON_GET_WORKLOADMON_GET_WO[[R]]KLOAD(null,-2));
===ロック・イベント・モニター===
*ロック・データを収集してロック競合状態の診断および修正作業を単純化するように設計
*[http://www-01.ibm.com/support/knowledgecenter/SSEPGG_10.1.0/com.ibm.db2.luw.admin.mon.doc/doc/c0054136.html?lang=ja-jp#c0054136__DeprecatedLockMonitoringFunctional 推奨されないロック・モニター機能]
===機能の有効化手順===
====CREATE C[[R]]EATE EVENT MONITOR FOR MONITO[[R]] FO[[R]] LOCKING ステートメントを使用して LOCK EVENT モニターを作成====
*モニターの名前を入力
*出力形式として UE 表を使用する場合は、ロック・イベント・データが書き込まれる未フォーマット・イベント表の名前も入力
*出力に通常の表を使用するように選択した場合は、 デフォルトの表名が割り当てられます
=====バイナリー・データの扱い=====
*db2evmonfmt [[Java ]] アプリケーションを使用して XML またはテキスト文書に変換できる*EVMON_FORMAT_UE_TO_XML EVMON_FORMAT_UE_TO_[[XML]] 表関数を使用して [[XML ]] レポート文書にフォーマット*EVMON_FORMAT_UE_TO_TABLES [[EVM]]ON_FORMAT_UE_TO_TABLES プロシージャーを使用してリレーショナル表にフォーマット
====ロック・イベント・データをキャプチャーするレベルを指定====
=====ワークロード=====
*既存のワークロードを変更する
*CREATE C[[R]]EATE または ALTER WORKLOAD ALTE[[R]] WO[[R]]KLOAD ステートメントを使用して新規ワークロードを作成する*ワークロード・レベルで、キャプチャーするロック・イベント・データのタイプ、およびロックに関係したアプリケーションの [[SQL ]] ステートメント履歴および入力値を必要とするかどうかを指定<blockquote>[[SQL ]] ステートメント履歴および入力値のキャプチャーにより、プロセッサー時間、メモリー、およびストレージの使用量が増大しますが、 ロック問題を適切にデバッグするには、多くの場合このレベルの詳細情報が必要</blockquote>=====データベース・レベルで収集し、すべての [[DB2 ]] ワークロードに影響を与える=====
{|class="wikitable"
!値
===ロック・イベント・データの収集とレポートの生成===
*http://www-01.ibm.com/support/knowledgecenter/SSEPGG_10.1.0/com.ibm.db2.luw.admin.mon.doc/doc/t0055093.html?lang=ja
*DBADM または SQLADM [[SQL]]ADM 権限 が必要*データ値を表示するには、EVMON_FORMAT_UE_データ値を表示するには、[[EVM]]ON_FORMAT_UE_* ルーチンに対する EXECUTE 特権が必要(DBADM 権限が暗黙的に保持)
===手順===
====lockevmon というロック・イベント・モニターを作成====
CREATE C[[R]]EATE EVENT MONITOR MONITO[[R]] lockevmon FOR FO[[R]] LOCKING WRITE W[[R]]ITE TO UNFORMATTED UNFO[[R]]MATTED EVENT TABLE
*イベント・モニターは前もって作成できます。また、ディスク・スペースが使い尽くされることを心配する必要はありません。
*データベース・レベルまたはワークロード・レベルのデータ収集を活動化するまでは何も書き込まれません。
====ロック・イベント・モニター lockevmon を活動化====
SET EVENT MONITOR MONITO[[R]] lockevmon STATE 1
====ロック・イベント・データ収集を使用可能====
=====ワークロード・レベル=====
*COLLECT 節の 1 つを使用して ALTER WORKLOAD ALTE[[R]] WO[[R]]KLOAD ステートメントを発行*COLLECT 節で WITH HISTORY HISTO[[R]]Y オプションを指定
=====すべてのワークロード=====
*データベース構成パラメーターを設定すると、データベース・レベルのロック・イベント・データ収集に影響を与え、すべてのワークロードが影響
*例
**FINANCE アプリケーションについては 5 秒経過後に獲得されたロックのロック待機データを収集
**PAYROLL PAY[[R]]OLL アプリケーションについては 10 秒経過後に獲得されたロックのロック待機データを収集 ALTER WORKLOAD ALTE[[R]] WO[[R]]KLOAD finance COLLECT LOCK WAIT DATA WITH HISTORY HISTO[[R]]Y AND VALUES FOR FO[[R]] LOCKS WAITING MORE MO[[R]]E THAN 5 SECONDS ALTER WORKLOAD ALTE[[R]] WO[[R]]KLOAD payroll COLLECT LOCK WAIT DATA FOR FO[[R]] LOCKS WAITING MORE MO[[R]]E THAN 10 SECONDS WITH HISTORYHISTO[[R]]Y
*例
**SAMPLE データベースの mon_lockwait データベース構成パラメーターを HIST_AND_VALUES 入力データ値を指定して設定
=====ロック・タイムアウト・イベントの場合(COLLECT LOCK TIMEOUT DATA)=====
*例
**FINANCE および PAYROLL PAY[[R]]OLL アプリケーションのロック・タイムアウト・データを収集する ALTER WORKLOAD ALTE[[R]] WO[[R]]KLOAD finance COLLECT LOCK TIMEOUT DATA WITH HISTORYHISTO[[R]]Y ALTER WORKLOAD ALTE[[R]] WO[[R]]KLOAD payroll COLLECT LOCK TIMEOUT DATA WITH HISTORYHISTO[[R]]Y
*例
**SAMPLE データベースの mon_locktimeout データベース構成パラメーターを HIST_AND_VALUES 入力データ値を指定して設定
=====デッドロック・イベントの場合(COLLECT DEADLOCK DATA)=====
*例
**FINANCE および PAYROLL PAY[[R]]OLL アプリケーションのデータを収集 ALTER WORKLOAD ALTE[[R]] WO[[R]]KLOAD finance COLLECT DEADLOCK DATA WITH HISTORYHISTO[[R]]Y ALTER WORKLOAD ALTE[[R]] WO[[R]]KLOAD payroll COLLECT DEADLOCK DATA WITH HISTORYHISTO[[R]]Y
*例
**SAMPLE データベースの mon_deadlock データベース構成パラメーターを HIST_AND_VALUES 入力データ値を指定して設定
====ロッキング・イベント・レポートを取得====
*ワークロードの再実行とデータベースへの接続
=====[[XML ]] パーサー・ツール db2evmonfmt を使用=====*C:\IBM\SQLLIB[[SQL]]LIB\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_XMLEVMON_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
====未フォーマット・イベント表からデータを抽出するルーチン====
*http://www-01.ibm.com/support/knowledgecenter/SSEPGG_10.1.0/com.ibm.db2.luw.admin.mon.doc/doc/c0059091.html?lang=ja
=====EVMON_FORMAT_UE_TO_TABLES[[EVM]]ON_FORMAT_UE_TO_TABLES=====
*http://www-01.ibm.com/support/knowledgecenter/SSEPGG_10.5.0/com.ibm.db2.luw.admin.mon.doc/doc/r0055559.html?lang=ja
=====EVMON_FORMAT_UE_TO_XMLEVMON_FORMAT_UE_TO_[[XML]]=====
====ロック・データ収集をオフ====
=====ロック待機イベントの場合=====
ALTER WORKLOAD ALTE[[R]] WO[[R]]KLOAD finance COLLECT LOCK WAIT DATA NONE ALTER WORKLOAD ALTE[[R]] WO[[R]]KLOAD 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 ALTE[[R]] WO[[R]]KLOAD finance COLLECT LOCK TIMEOUT DATA NONE ALTER WORKLOAD ALTE[[R]] WO[[R]]KLOAD payroll COLLECT LOCK TIMEOUT DATA NONE
db2 update db cfg for sample using mon_locktimeout none
=====デッドロック・イベントの場合=====
ALTER WORKLOAD ALTE[[R]] WO[[R]]KLOAD finance COLLECT DEADLOCK DATA NONE ALTER WORKLOAD ALTE[[R]] WO[[R]]KLOAD payroll COLLECT DEADLOCK DATA NONE
db2 update db cfg for sample using mon_deadlock without_hist
{{amazon|4774145971}}

案内メニュー