h2.2. enqueue 락이란?
enqueue 락은 우리가 흔하게 얘기하는 바로 그 lock을 말한다.
X$KSQEQ
kernel service enqueue object로서 오라클이 락을 관리하기 위해 사용하는 구조체
V$ENQUEUE_LOCK
뷰 쿼리의 내용을 확인해 보자.
SQL> select view_definition from v$fixed_view_definition
where view_name ='GV$ENQUEUE_LOCK';


SQL> select * from v$enqueue_lock;



v$enqueue_lock은 다음의 테이블로 구성되어있다.

  • x$ksqeq (kernel service enqueue object)
  • x$ksuse (kernel service session info)
  • x$ksqrs (kernel service enqueue resource)

view의 컬럼 중 주요 컬럼은 다음과 같다.

  • ADDR: 락 state object의 주소
  • KADDR: 락 주소
  • LMODE: 락 소유 모드
  • REQUEST: 락 요청 모드
  • CTIME: 락 소유 또는 요청 시점부터 현재까지의 경과시간
  • BLOCK: 다른 락을 블로킹하는 지의 여부를 나타내는 블로킹 플래그
  • enqueue 락을 위한 주요 정보는 <LMODE-REQUEST-CTIME-BLOCK>

락 정보를 위한 메모리 구조에는 TYPE+ID1+ID2정보가 없기 때문에 다음과 같이 연결하여 보여준다.

  • x$ksqeq.ksqlkres=x$ksqrs.addr


X$KSQEQ(kernel service enqueue object)
트랜잭션 락(TX)및 DML락 ™ 이 enqueue 대기 현상이 발생하는 경우 저장되는 구조이다. V$ENQUEUE_LOCK의 base fixed view이다.
X$KTCXB(kernel transaction control object )
트랜잭션 락(TX) 정보를 저장하는데 사용
V$TRANSACTION_ENQUEUE 뷰의 base 테이블
X$KTADM(kernel transaction access definition dml lock)
DML락™ 정보를 저장하는데 사용
[P120 예제]
1) 테스트용 테이블 생성 및 테스트 데이터 입력

2) delete 진행

3) V$RESOURCE 및 V$ENQUEUE_LOCK 뷰 확인

<TM-31552-0> <TX-458764-56572> 2개의 리소스 생성 확인

하지만 해당 리소스가 사용하는 enqueue lock은 존재하지 않는다.
4) V$TRANSACTION_ENQUEUE view 확인

V$TRANSACTION_ENQUEUE를 통해 enqueue lock <TX-458764-56572>이 존재함을 확인할 수 있다.
--> view 생성 구문을 통해 내부에서 x$ktcxb가 사용되었음을 확인할 수 있다.
5) x$ktadm 확인

<TM-31552-0> 를 사용하는 enqueue lock이 있음을 확인할 수 있다.
--> enqueue lock 정보를 x$ktadm에 저장함을 알 수 있다.