Enqueue Lock 대기 현상 사례 모음
– 이 이외의 여러 가지 경우가 있을 수 있습니다.
– 자주 목격되는 몇 가지 사례 위주로 정리
Enq : US
Undo Segments를 Online / Offline 시키기 위해 획득하는 락
발생원인 : Automatic Undo Management환경에서 일시적으로 대량의 트랜잭션이 몰리면서 과도하게 Undo Segment가 Online되면서 경합이 발생
확인방법 : session_wait 뷰의 Enq : US 경합 목격 , row cache lock (P1=3)동일 시간대 Alert Log 파일에 Undo Segment Online 메시지 다량 발생
조치방법 : 사용 안하는(Idle) Undo Segment에 대하여 SMON이 Offline 시키지 못하게 함
event=’10511 trace name context forever, level 2” 추가
Enq : SQ
시퀀스 사용시 획득 하는 락
발생원인 : Sequence를 사용함에 있어서 Cache 옵션 값이 작거나 , 없는 시퀀스에 대한 인출 요청이 과도할 경우 발생
확인방법 : session_wait 뷰의 Enq : SQ 경합 목격 , row cache lock(P1=13)발생
조치방법 : Enq : SQ 경합 메시지의 P2값을 이용하여 Object를 확인 후 Cache값을 증가
Object명이 AUDSES$ 인 것은 세션 로그 인시 사용하는 시퀀스 임
Default 값이 200이나 1000이나 2000 정도로 변경해 주면 조치 가능
Enq : TM(S) or TM(SSX)
발생원인 : Parent – Child 관계가 있는 테이블 관계에서 Child 테이블의 FK 컬럼에 인덱스 부재로 부모테이블의 PK 또는 row가 변경 될 경우 Child 테이블에 대하여 TM(S) , TM(SSX) 락 대기 요청 발생
확인방법 : session_wait 뷰의 Enq : TM 경합 목격
조치방법 : Child 테이블의 FK 컬럼에 인덱스 생성
Enq : TX(S)
발생원인 : Unique Constraint 또는 Unique Index가 존재하는 테이블에 동시 Insert 발생 시 중복 값이 들어 갈 경우 . ITL의 maxtrans의 값을 초과 하거나 블록내의 여유 공간이 부족한 경우(PCTFREE가 너무 적은 경우) . 인덱스 리프 노드가 Split 되는 경우 , Bitmap index를 사용하는 곳에 대량 DML 발생 시
분산 트랜잭션 환경에서 다른 세션에서 읽고 있는 동시에 읽고자 하는 경우
확인방법 : session_wait 뷰의 Enq : TX(S) 경합 목격
조치방법 : 중복 값이 들어가지 않도록 APP에서의 정책 추가나, 시퀀스 사용가능 한 컬럼일 경우 시퀀스를 사용하도록 권장
ITL 엔트리 부족일 경우 PCTFREE 공간을 적절히 설정.
분산 트랜잭션의 경우 사용이 끝나면 commit이나 rollback을 적절히 사용해 주고 그렇지 못한 세션에 대해서는 dba_2pc_pending 뷰를 이용하여 세션에 대한 조치 필요
Enq : SS
SS : Sort Segment
발생원인 : Startup 이후 Temporary Tablespace에 생성된 Sort Segment Clean up에 오랜 시간이 소요. Instance Crash / Shutdown abort 이후 Transaction Recovery 하는데 이때 다른 세션들이 Sort Segement에 대한 SS 이벤트 대기.
확인방법 : session_wait 뷰의 Enq : SS 경합 목격
조치방법 : 대기를 겪는 유저의 Temporary Tablespace 변경. event = “10513 trace name context forever, level 2” 이벤트를 추가 함으로 SMON이 트랜잭션 리커버리를 수행하지 못하게 함
이후 세션에서 Temporary Segment를 사용하는 쿼리를 수행 후 정상적으로 사용되는 것을 확인 후 Event Off 시킴
oradebug event 10513 trace name context off
Enq : WL
WL : Being Written Redo Log
발생원인 : 자주 목격이 되는 이벤트는 아니기에 발생원인 보다는 사용시기를 적어 봄
When adding a new member to a redo log group.
When removing a logfile from a redo log group.
When clearing a logfile’s contents.
When renaming a logfile.
When archiving the logfile..