2018.10.24
Enq: DX – contention
目次
- 1. 基本情報
- 2. パラメータと待機時間
- 3. チェックポイントとソリューション
- 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ロック誘発されません。
パラメータと待機時間
待機パラメータ
P1:Enqueue情報(name| mode) P2:transaction entry# P3:0
待機時間
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
1.TUXEDO SERVER PROCESS SPINS HOLDING TRANSACTION BRANCH ALLOCATION LATCH (Bug4627203)
分析例
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に変更した後、その競合現象は発生していませんでした。