- enq: HW – contention
HWM을 여러 프로세스가 동시에 변경하는 것을 막기 위한 락을 HW 락이라고 부른다. HWM을 이동시키고자 하는 프로세스는 반드시 HW 락을 획득해야 한다. HW 락 경합은 세그먼트의 급속한 공간 확장이 필요한 경우에 매우 보편적으로 나타나는 대기 현상이며 극단적인 성능 저하를 야기하는 경우도 종종 발생한다.
세그먼트 공간관리기법은 크게 FLM과 ASSM으로 나뉘는데, FLM을 사용하는 경우에 특히 HW 락 경합이 문제가 되는 경우가 많다. FLM을 사용할 경우 HWM의 이동을 결정하는 FREELISTS 속성의 기본값이 1로 세팅되어 있기 때문이다. FLM을 사용하는 경우 FREELISTS 값을 동시 트랜잭션의 수를 고려해서 충분히 크게 잡아주거나, _BUMP_HIGHWATER_MARK_COUNT 히든 파라미터의 값을 크게 설정해주면 되고, 적절한 크기의 익스텐트를 사용하면 HW 락의 경합을 줄여줄 수 있다.
ASSM에서 HW 락 경합이 일어난다면 익스텐트의 크기를 조정하는 것 외에는 별도의 튜닝 방법은 없으나, ASSM은 급격한 공간확장이 발생하는 경우에도 항상 만족할 만한 성능을 보장해준다. HW 락을 줄이는 방법들은 크게 FLM보다는 ASSM을 사용해야 하고, 적절한 크기의 익스텐트를 사용해야 하며, LMT (Locally Managed Tablespace)를 사용하면 되고, 더불어 특별한 경우가 아니라면 Uniform Size의 익스텐트를 사용하며 충분한 크기의 익스텐트를 사용한다.
- enq:ST - contention, enq: TT – contention
오라클 8i에서 DMT (Dictionary Managed Tablespace)를 사용할 경우 익스텐트 할당과 같은 공간관리 작업을 수행할 때, 오라클은 해당 작업을 동기화하기 위해 ST락을 사용한다. 최근에는 LMT (Locally Managed Tablespace)를 사용하므로 이와 같은 문제는 발생하지 않는다.
TT락의 경우는 8i부터 사용되는 것으로, ST락을 사용하던 일부 테이블스페이스 관련 작업에 TT락을 사용한다. TT 락은 ST 락과 달리 테이블스페이스마다 하나씩 사용 가능하다. 즉, ST 락(전체 인스턴스에 1개)에 비해 경합을 감소시키는 효과가 있다. TT 락 경합은 거의 발생하지 않는다. 또한 임시 테이블스페이스를 도입해서 SMON이 정렬 영역을 정리하기 위해 ST락을 대기하는 것이 없어졌다.
- enq: US – contention
언두 세그먼트를 온라인 또는 오프라인하는 과정을 동기화하기 위해 해당 작업을 수행하는 서버 프로세스나 백그라운드 프로세스는 US 락을 획득해야 한다. US 락은 언두 세그먼트마다 하나씩 할당된다. 언두 세그먼트가 온라인 또는 오프라인되는 시점은 다음과 같다.
1) 인스턴스 기동: 데이터베이스를 오픈하는 과정에서 언두 세그먼트를 온라인시킨다.
2) alter system set undo_tablespace = xxx를 통해 언두 테이블스페이스를 변경할 때, 기존 언두 세그먼트를 오프라인시키고, 새로운 언두 세그먼트들을 온라인시킨다.
3) 트랜잭션의 증가와 감소: 트랜잭션이 급격히 증가하면, 언두 세그먼트를 온라인시키거나, 새로운 언두 스페이스를 생성하며, 감소하면 언두 세그먼트를 오프라인시킨다. 이러한 작업은 SMON에 의해 이루어진다. 서버 프로세스가 트랜잭션을 시작하는 시점에 언두 세그먼트를 할당 받아야 하는데, 언두 세그먼트가 존재하지 않는 경우와 트랜잭션의 변동이 심한 경우에 언두 세그먼트를 온라인시키는 작업 등으로 인해서 US 락이 나타난다. 보통의 시스템에서는 갑자기 많은 수의 언두 세그언트를 온라인시키는 경우가 많지 않으므로 US 락 경합은 일반적으로 자주 발생하지는 않는다. 하지만 시스템의 속성상 트랜잭션의 변동 량이 크고, 이로 인해 US 락 경합이 계속해서 발생한다면, 10511 이벤트를 수행하도록 지정한다. 10511 이벤트는 SMON이 언두 세그먼트를 오프라인 시키는 기능을 수행하지 않도록 하는 역할을 한다.
'Oracle DB' 카테고리의 다른 글
리두(Redo)에서의 대기 이벤트들 (0) | 2021.04.02 |
---|---|
I/O에서의 대기 이벤트들 (0) | 2021.04.02 |
트랜잭션에서의 대기 이벤트들 (0) | 2021.04.02 |
라이브러리 캐시(Library Cache)에서의 대기이벤트들 (0) | 2021.04.02 |
버퍼 캐시에서의 대기 이벤트들 (0) | 2021.04.02 |