Enq: ST - contention

EXEM Knowledge Base

Jump to: navigation, 찾기

목차

[편집] Basic Info

오라클 8i에서 DMT(Dictionary Managed Tablespace)를 사용할 경우 익스텐트 할당과 같은 공간관리 작업을 수행할 때, 오라클은 해당 작업을 동기화하기 위해 ST 락을 사용한다. ST 락은 전체 인스턴스에서 단 하나에 불과하다. 특정 시점에 공간관리 관련 작업(가령 Insert에 따른 익스텐트 할당 등)이 동시에 과다하게 발생하는 경우 해당 작업을 동기화하기 위해 대부분의 세션이 ST 락을 획득하기 위해 대기하고 이로 인해 성능 저하가 발생하게 된다. ST 락 경합이 발생하면 enq: ST - contention 이벤트들 대기하게 된다. ST 락에 의한 경합은 오라클 8i이후부터 제공되는 LMT(Locally Managed Tablespace)를 사용하면 대부분 해결된다.

DMT에서는 UET$, FET$등 익스텐트에 관련된 딕셔너리 테이블들에 익스텐트 정보를 관리하기 때문에 익스텐트의 변경이 있을 때마다 해당 테이블을 조회하고 변경하는 일련의 작업이 필요하다. 가령 대량 Insert 작업에 의해 10만개의 익스텐트 할당이 발생한다면, UET$, FET$에 10만개에 해당하는 데이터를 읽고 써야 한다. 이 작업들은 모두 ST 락을 획득한 이후에만 가능하다. ST 락은 전체 인스턴스에서 단 하나만 사용가능하기 때문에 동시에 여러 세션이 익스텐트를 할당 받는 경우 ST 락을 획득하기 위해 치열한 경합이 벌어지게 된다. 반면 LMT를 사용하는 경우 익스텐트 정보는 데이터파일의 헤더에 존재하는 비트맵 영역에 관리되고 딕셔너리 정보를 거의 참조하기 않기 때문에 ST 락에 의한 경합은 거의 발생하지 않는다. 오라클 9i 이후부터는 기본적으로 LMT가 사용되므로 ST 락에 의한 경합은 더 이상 성능 이슈가 되지 않는다.

오라클 8i부터는 ST 락 경합을 줄일 수 있는 세가지 방법을 제공한다.

첫째, LMT 기능을 추가했다. LMT를 효과적으로 사용하는 것은 DBA의 몫이며, 오라클 9i 이후로는 거의 기본적인 세팅이 되었다

둘째, TT 락의 사용을 확대했다. 오라클 8i 이전 버전에서는 TT 락ST 락처럼 인스턴스 별로 하나만 존재했으며, 인스턴스 기동 시에 롤백 세그먼트를 할당할 때 획득한다. 하지만 오라클 8i 부터는 기존에 ST 락을 사용하던 일부 테이블스페이스 관련 작업에 TT 락을 사용한다. TT 락을 사용하는 작업의 종류는 ID2 값에 지정되는데, ID2 값의 의미는 메타링크 문서번호 34666.1에 다음과 같이 잘 나타나있다.

0 - Used to prevent deadlocks between dropping tablespaces and creating a rollback segment in it. 
1 - Used to serialise the creation of datafiles within a given tablespace. 
2 - Used to prevent other operations from happening to a tablespace during tablespace point in time recovery. 
4 - Used to lock the tablespace id when creating a tablespace. 
8 - Prevents deadlocks during ALTER TABLESPACE operations. This was added for Bug 503594 . 
16 - Used for synchronising the allocation and deallocation of extents. 

TT 락ST 락과는 달리 테이블스페이스마다 하나씩 사용 가능하므로(ID1 = tablespace#) ST 락을 사용할 때에 비해 경합을 감소시키는 효과가 있다. TT 락을 획득하기 위해 대기하면 V$SESSION_WAT 뷰에는 enq: TT - contention 이벤트가 기록된다. 다행히 TT 락 경합은 거의 발생하지 않는다.

셋째, LMT임시 테이블스페이스(Temporary tablespace)를 도입했다. 영구 테이블스페이스(Permanent Tablespace)를 정렬 영역으로 사용할 경우 정렬 수행에 따른 과도한 익스텐트의 할당과 해제는 ST 락의 경합을 유발하고 이로 인해 성능이 크게 저하되는 현상이 발생한다. 특히 SMON이 정렬 영역을 정리하기 위해 ST 락을 대기하는 경우 치명적인 성능저하를 일으킬 수 있다. 임시 테이블스페이스는 LMT를 사용하며, 임시 세그먼트를 할당하고 해제하는 과정에서 좀 더 효과적인 알고리즘을 사용함으로써 정렬수행에 의한 ST 락 경합을 해소한다.

ST 락 경합 현상은 오라클 8i 이후로는 거의 이슈가 되지 않는다. 오라클 8i에서 새로이 추가된 LMT나 임시 테이블스페이스와 같은 기능을 적절히 사용하면 ST 락 경합은 실질적으로 완전히 사라진다.

[편집] Parameter & Wait Time

[편집] Wait Parameters

  • P1 : Enqueue 정보
  • P2 : 0
  • P3 : 0

[편집] Wait Time

enqueue 대기이벤트와 동일하다. 최대 3초까지 기다린다. 만일 ST 락을 획득하기 못하면 획득할 때까지 대기한다.

[편집] Check Point & Solution

[편집] ST 락 경합 줄이기

ST 락 경합을 줄이는 방법은 다음과 같다.

  • 가능하면 오라클 8i 이상으로 업그레이드하고 LMT임시 테이블스페이스(Temporary Tablespace)기능을 사용한다.
  • 하위 버전을 사용하거나 기타 이유로 인해 LMT 사용이 불가능하다면, 적절한 크기의 익스텐트를 사용한다. 익스텐트 크기가 적당히 크면 익스텐트의 할당 회수 자체가 줄어들어 상대적으로 ST 락 경합이 줄어든다.

[편집] Event Tip

[편집] Analysis Case