Enq: SQ - Contention, DFS lock handler(SV)

오라클에서 Sequence 를 관리 하기 위해 사용하는 세 가지의 락

1. Row Cache Lock ( NOCACHE )

  • Sequence.nextval 을 호출하는 과정에서 딕셔너리 정보를 물리적으로 변경 하는
    경우에 획득한다. NOCACHE 속성을 부여한 Sequnece 에서 사용

2. SQ Lock ( CACHE + NOORDER )

  • 메모리에 캐시 되어 있는 범위 안에서 Sequence.nextval을 호출하는 동안 획득
    한다. CACHE 속성을 부여한 Sequence 에서 사용된다.
  • Sequence 생성시 부여한 Cache 크기가 작은 경우에 enq: SQ - Contention 대기가
    증가하는 경향이 있다. 캐시의 크기가 작은 경우에는 메모리에서 미리 캐시된 값이
    빠른 속도로 소진되며, 캐시 값이 소진된 경우, Dictionary 정보를 물리적으로 변경하고
    다시 캐쉬 하는 작업을 해야 한다. 그 동안 SQ Lock을 계속해서 획득해야 하기 때문에
    Enq: SQ - Contention 이벤트 대기 시간이 그만큼 증가하는 것이다.
  • SQ LOCK 경합에 의한 성능 문제는 CACHE 속성을 크게 해주는 것으로 해결 가능
  • 디폴트 CACHE값은 20

3. SV Lock ( CACHE + ORDER ( RAC )

  • RAC에서 노드 간에 순서가 보장된 상태로 Sequence.nextval을 호출하는 동안
    획득한다. CACHE + ORDER 속성을 부여한 Sequence 에서 사용된다.
  • ORDER 속성이 부여된 Sequence 에 대해서 nextval을 호출하면 SSX 모드로 SV 락을
    획득해야 한다.
  • DFS lock handle 이벤트는 OPS나 RAC 환경에서 버퍼 캐시 동기화를 제외한 ROW CACHE 나
  • Library cache 의 동기화를 위해 획득하는 과정에서 대기하는 이벤트이다.
  • 여러 노드 간에 Sequence의 순서를 보장하려면 글로벌 하게 락을 획득해야 하고 이 과정에서 DFS lock handle 대기가 발생하게 되는 것이다.
  • 대기 이벤트의 P2 값을 통해서 어떤 Sequence 에 대해 대기가 발생하는지 확인가능
  • RAC 환경에서 CACHE + NOORDER 속성 권고
  • RAC 환경에서 순서를 보장받는 것이 필요하다면 CACHE + ORDER 속성 부여