SQ LOCK
CACHE 속성의 개별 Sequence 를 보호하는 LOCK

  • Dictionary 로부터 Cache로 Sequence 값을 불러 들이는 작업을 보호
  • Cache 로부터 다음 값(Nextval)을 얻는 작업을 보호

시퀀스 관리 하기 위한 3가지 락
1. Row Cache Lock - Nocache Sequence
2. SQ Lock - Cache Sequence
3. SV Lock - Cache + Order Sequence ( RAC )

( TEST )
SQL> create sequence s1 cache 10 ;
Sequence created.
세션1) SQL> @temp.sql
세션2) SQL> @temp.sql

SQL> SELECT A.SID, A.SEQ#, B.EVENT, B.P1, B.P2, C.OBJECT_NAME
from v$session_wait B, V$SESSION A, DBA_OBJECTS C
WHERE A.EVENT like 'enq: SQ - contention%'
AND A.SID = B.SID
AND A.SEQ# = B.SEQ#
AND A.P2 = C.OBJECT_ID ;

SQ LOCK 경합
: Cache 크기가 작은 Sequence

  • Cache 크기가 작으면 SGA에 저장된 값이 빠른 속도로 소진
  • 이로 인해, SQ LOCK 을 보유한 채 Dictionary 를 읽는 작업이 빈번하게 발생
  • Sequence 의 Cache 크기를 충분하게 큰 값을 부여
  • 동시 사용 Session 이 많으면 10,000 이상의 큰 값도 사용 가능