IT기술/Oracle

06 Row Cache 에서의 대기 이벤트들

dobbby 2014. 1. 29. 14:27
반응형

1. row cache lock

오라클은 딕셔너리의 정보를 SGA 내의 Row Cache (혹은 Dictionary Cache) 영역에 저장하고 있다.

Row Cache 는 Shared Pool 영역에 존재하며 다음과 같은 쿼리로 확인할 수 있다.

SQL> select pool, name, bytes from v$sgastat

  2      where name = 'row cache' ;


딕셔너리의 내용을 변경하고자 하는 프로세스는 그에 해당하는 row cache object 에 대해서 row cache lock 을 획득해야 한다.

대표적인 경우가 시퀀스 (Sequence) 인데, 시퀀스의 nextval 을 획득하는 과정에서 딕셔너리 정보의 변경이 필요한 경우에

시퀀스에 해당하는 row cache object 에 대해서 row cache lock 을 SSX (Shared Sub-Exclusive) 모드로 획득해야 한다.

Row Cache Lock 은 Enqueue 구조를 사용하지 않으며 row cache object 정보 안에 존재하는 락 보유목록 (Owner list) 과

락 대기 목록 (Waiter list) 을 통해 블로킹 메커니즘을 구현한다.




2. enq: SQ - contention, DFS lock handle (SV)

오라클은 시퀀스를 관리하기 위해 세가지 락을 사용한다.

- row cache lock : Sequence.nextval 을 호출하는 과정에서 딕셔너리 정보를 물리적으로 변경하는 경우에 획득한다.

NOCACHE 속성을 부여한 시퀀스에서 사용된다.

- SQ 락 : 메모리에 캐시되어 있는 범위안에서 Sequence.nextval 을 호출하는 동안 획득한다.

CACHE 속성을 부여한 시퀀스에서 사용된다.

- SV 락 : RAC 에서 노드간에 순서가 보장된 상태로 Sequence.nextval 을 호출하는 동안 획득한다.

CACHE + ORDER 속성을 부여한 시퀀스에서 사용된다.


 


반응형