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..

By haisins

오라클 DBA 박용석 입니다. haisins@gmail.com 으로 문의 주세요.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다