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은 다음의 테이블로 구성되어있다.
view의 컬럼 중 주요 컬럼은 다음과 같다.
락 정보를 위한 메모리 구조에는 TYPE+ID1+ID2정보가 없기 때문에 다음과 같이 연결하여 보여준다.
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에 저장함을 알 수 있다.