세그먼트(Segment)에서의 대기이벤트들

enq: HW - contention
HWM을 여러 프로세스가 동시에 변경하는 것을 막기위한 락 - HW락 - 경합시 enq: HW - contention
주로 대량의 insert에 의해 발생, 간혹 대량의 update로도 발생(update 때문에 발생하는 경우라면 언두 세그먼트의 급속한 확장 때문일 것이다)
세그먼트 공간 관리 기법을 FLM으로 쓴다면, HWM의 이동을 결정하는 FREELISTS속성의 기본값이 1인지라, HW락 경합 발생 가능성 크다.
FLM사용시 HW락 경합 줄기는 법
1. FREELISTS의 값을 트랜잭션 수를 고려해 넉넉히 잡도록 한다.
2. _BUMP_HIGHWATER_MARK_COUNT 히든 파라미터 값을 크게 잡는다 -> HWM이동시 얼만큼 이동하는지에 관한 파라미터
3. 익스텐트의 크기를 적절히 늘려준다. (대체로 extent management local uniform size 5M 정도로 잡는다고 함)
ASSM을 사용하고 있다면 - 익스텐트 크기 조정 외에는 별 다른 방법이 없다 - ASSM을 사용하면 웬만해선 성능에 문제 자체가 생기지를 않는다.

HW락 줄이는법 정리
1. 9i 이상이면 ASSM을 사용하라 -> 8i이하면 FREELISTS 값을 적절하게 + _BUMP_HIGHWATER_MARK_COUNT 충분하게
2. 익스텐트 크기를 적절히 늘려준다 보통은 5M 권장
3. 8i 이상이면 LMT(locally managed tablespace)를 사용 - 9i부터는 이게 기본값 + uniform size의 익스텐트를 사용하도록 한다.


enq: ST - contention, enq: TT - contention
DMT(Dictionary Managed Tablespace)를 사용하는 경우 -> 익스텐트 할당같은 공간 관리 작업 수행시 - ST락을 잡고 동기화 작업을 했다 - 게다가 ST락은 전체 인스턴스에 단 1개
아무튼 과거의 일이고, 8i부터 제공되는 LMT(Locally Managed Tablespace)를 사용하면 대부분 해결된다.
LMT사용하면 인스텐트에 대한 정보를 데이터 파일 헤더의 비트맵으로 관리하므로 딕셔너리 테이블들에 대한 작업이 불필요하다 - 9i부터는 이게 기본값
TT락 - 8i부터 ST락을 사용하던 일부 테이블스페이스 관련 작업이 TT락을 사용 -> TT락은 테이블스페이스마다 하나씩 사용가능하다 -> ST락 경합 감소
ST락 경합 감소 많이하겠지만 -> TT락 경합 발생도 조금 있겠지 -> 그 경합이 enq: TT - contention대기 이벤트이다.
임시 테이블스페이스를 추가하여 갑자기 익스텐트가 많이 할당+해제하게 될지도 모를 정렬작업 따위는 이제 임시테이블에서 일어난다 - 임시 테이블스페이스는 LMT로 관리된다.
ST락 경합은 8i이후로는 거의 이슈가 되지 않는다고 한다.


enq: US - contention
AUM을 사용하는 경우 언두 세그먼트가 온라인 또는 오프라인 되는 시점
1. 인스턴스 기동: 데이터베이스를 오픈하는 과정에서 언두 세그먼트를 온라인 시킨다.
2. alter system set undo_tablespace = xxxx 를 통해 언두 테이블스페이스를 변경할때 - 기존 언두 세그먼트를 오프라인 시키고, 새로운 언두 세그먼트를 온라인시킨다.
3. 트랜잭션의 증가와 감소 : 트랜잭션양이 증가해서 기존 언두 세그먼트만으로 트랜잭션을 감당할 수 없을때 - 온라인 시키거나 새로운 언두 세그먼트를 생성하거나 || 일정시간 트랜잭션이 없거나 줄어들면, 언두 세그먼트를 오프라인 시킨다.

이러한 언두 세그먼트 온라인-오프라인 과정을 동기화하기 위해 US락을 획득해야한다. 경합시 enq: US - contention 대기 이벤트. US락은 언두 세그먼트마다 하나씩 할당된다.
트랜잭션의 변동이 심한 경우에 언두 세그먼트를 온라인 시키거나 새로 생성해줘야 할 경우들이 생기는데, 이때 온라인 되거나, 생성 될때까지는 US락을 필요로하고, 그 와중에 US락 경합에 의한 대기현상 발생 가능
언두 세그먼트가 온라인되면 얼럿에 찍히므로, 얼럿 로그파일을 참조하면 쉽게 분석할 수 있을 것이다.

10511이벤트를 레벨2로 올려놓고 재기동하면, 한번 온라인되 언두 세그먼트는 다시 오프라인 시키지 않도록 된다.