Enq: DX - contention

EXEM Knowledge Base

Jump to: navigation, 찾기

목차

[편집] Basic Info

DX 락은 Distributed Transaction을 보호하는 락이다. 웹 어플리케이션 시스템에서 WAS(웹어플리케이션 서버)와 같은 미들웨어의 설정이 tightly coupled로 설정되어 있으면,  오라클 세션에 접속하여 트랜잭션을 수행할 때, 오라클의 dba_pending_transactions 뷰에 DX Lock을 걸고 트랜잭션을 수행한다. 이때 트랜잭션이 지연되면, DX Lock이 발생할 수 있다.

[편집] Tightly-Coupled Integration

세션의 여러 요청을 하나의 Transaction이 담당하게 하여 처리하는 설정이다. M : 1 Transaction 처리방식이므로 Distribute 트랜잭션이 발생하고, DX 락이 유발된다.

[편집] Loosely-Coupled Integration

세션의 하나의 요청에 하나의 Transaction이 담당하여 처리하는 설정이다. 1:1 Transaction 처리방식이며, DX 락이 유발되지 않는다.

[편집] Parameter & Wait Time

[편집] Wait Parameters

  • P1 : Enqueue 정보(name|mode)
  • P2 : transaction entry #
  • P3 : 0

[편집] Wait Time

enqueue 대기이벤트와 동일하다. 최대 3초까지 기다린다. 만일 DX 락을 획득하기 못하면 획득할 때까지 대기한다.

[편집] Check Point & Solution

[편집] DX 락 경합 줄이기

1. 미들웨어 loosly coupled 로 설정 변경.

2. DX Lock을 유발시킨 Session 의 프로그램 실행 중지.

3. DX Lock Session을 강제 Kill 시킴.

4. 해당 프로그램이 같은 Group에 속하도록 하여 Distribute Transaction을 방지. (자세한 사항은 미들웨어 엔지니어 측에 문의)

[편집] Event Tip

보고된 Oracle Bug : Tuxedo 에서 DX enqueue 발생 Bug

  1. TUXEDO SERVER PROCESS SPINS HOLDING TRANSACTION BRANCH ALLOCATION LATCH (Bug4627203)

[편집] Analysis Case

[편집] DX Enqueue 경합 현상

문제가 되는 시점에 대량의 Lock 대기현상으로 인하여 Active Session 의 수가 증가하고 DB Hang이 발생되었다. 대량의 Lock 대기현상은 enq: DX – contention 과 enq: TX - row lock contention 대기 이벤트이다.

그림:5_3_1.jpg

Active session 증가 추이와 lock waiting session의 증가 추이가 비슷한 추이로 증가 감소하고 있다. 문제가 시작되는 시점의 Lock Tree를 확인 결과 Enq: DX - contention을 대기하는 세션이 다수 나타나있다.

그림:5_3_2.jpg

Active Session의 수치가 최고인 구간의 Lock Tree 상황을 확인해 보면, DX 락 발생과 함께 TX 락도 다수 발생되어 있다. 전체적으로 트랜잭션이 지연되고 있음을 알 수 있다.

이 분석 예에서는 문제 분석 인스턴스의 앞단의 WAS가 tightly coupled로 설정되어 문제가 발생한 것으로 확인되었으며, 미들웨어 설정을 Loosely-Coupled로 변경 한 후 해당 경합 현상은 발생되지 않았다.