
enq: DX – contention - 日本エクセム株式会社 Oracle待機イベント情報
目次[非表示]
- 1.基本情報
- 2.待機パラメータと待機時間
- 3.チェックポイントとソリューション
- 3.1.DXロック競合を減らす
- 4.豆知識
- 5.分析例
- 5.1.DX Enqueue競合現象
基本情報
DXロックはDistributed Transactionを保護するロックです。
ウェブアプリケーションシステムでWAS(Webアプリケーション・サーバー)のようなミドルウェアの設定がtightly coupledに設定されている場合、Oracleのセッションに接続してトランザクションを実行するとき、Oracleのdba_pending_transactionsビューにDX Lockをかけトランザクションを実行します。この時、トランザクションが遅延されると、DX Lockが発生することがあります。
Tightly-Coupled Integration
セッションの複数の要求を一つのTransactionが担当することにして処理する設定です。
M:1 Transaction処理方式であるため、Distributeトランザクションが発生し、DXロック誘発されます。
Loosely-Coupled Integration
セッションの一つのリクエストに1つのTransactionが担当して処理するための設定です。
1:1 Transaction処理方式であり、DXロック誘発されません。
待機パラメータと待機時間
待機パラメータ
待機時間
enqueue待機イベントと同一です。最大3秒まで待ちます。もしDXロックを獲得する場合獲得するまで待機します。
チェックポイントとソリューション
DXロック競合を減らす
1. ミドルウェアloosly coupledに設定変更します。
2. DX Lockを誘発させたSessionのプログラムの実行を停止。
3. DX Lock Sessionを強制的にKillする。
4. プログラムが同じGroupに属するようにしてDistribute Transactionを防止します。(詳細は、ミドルウェアエンジニア側にお問い合わせください)
豆知識
報告されたOracle Bug:TuxedoからDX enqueue発生Bug
分析例
DX Enqueue競合現象
問題になった時点で、大量のLock待機現象によりActive Sessionの数が増加してDB Hangが発生しました。大量のLock待機現象はenq:DX – contentionとenq:TX – row lock contention待機イベントです。
Active session増加推移とlock waiting sessionの増加推移が似たような推移で増加減少しています。
問題が発生した時点のLock Treeを確認した結果Enq:DX – contentionを待機するセッションが多数現れています。
Active Sessionの数値が最高区間のLock Tree状況を確認してみると、DXロック発生とTXロックも多数発生しています。全体的に、トランザクションが遅延していることを知ることができます。
この分析例では、問題の分析、インスタンスの前段のWASがtightly coupledに設定されて問題が発生したことが確認されており、ミドルウェアの設定をLoosely-Coupledに変更した後、その競合現象は発生していませんでした。