study:oracle:adv_owi_10g:segment_wait_event
문서의 이전 판입니다!
oracle10g : Segment Wait Event
enq: HW - connection
세그먼트 공간관리기법
FLM
(Freelist Management) | HW락 경합 문제가 되는 경우가 많음
동시에 여러 세션에서 Insert 할 경우 enq: HW - contention 대기 이벤트 발생
( buffer busy wait 대기도 같은 이유로 발생) |
ASSM
(Automatic Segment Space Management) | 특별한 설정이나 관리기법이 없이도 HW락 경합 문제가 스스로 해결된다. |
FLM 일 경우, HW락 경합을 줄이는 방법
FREELISTS 값을 동시 트랜잭션의 수를 고려해서 충분히 잡아준다.
default 값이 1로 되어 있으므로 꼭 변경해 주어야 한다.
_BUMP_HIGHWATER_MARK_COUNT(하나의 프리리스트당 HWM을 이동하는 크기 결정하는 값) Hidden parameter 값을 크게 설정한다.
예) FREELISTS = 10 이고 _BUMP_HIGHWATER_MARK_COUNT = 20 이면 , 한번에 200블록(10 * 20)만큼 HWM이 이동하게 된다.
적절한 크기의 익스텐드를 사용한다.
대부분 Extent Management Local Uniform Size 를 5M 정도로 설정할 것을 권고한다.
HW락
HW락 : HWM을 여러 프로세스가 동시에 변경하는 것을 막기 위한 락
대량의 Insert 를 할 경우 (대부분의 경우)
대량의 Update 를 할 경우 Undo Segment 에서 HW락 경합현상이 발생하는 경우
IMU(In-memory Undo) : 10g이상부터 추가된 기능으로,
언두 데이타를 Undo Segment가 아닌 Shared Pool 내의 KTI-UNDO 영역에 저장하는 기능
Undo Segment 확장에 의한 HW락 경합이 이전 버젼에 비해 줄어드는 효과
Undo block 을 읽고 쓰는 작업이 줄어들어 시스템 전체의 성능개선효과
동일한 KTI-UNDO영역을 사용하기 위해 경합이 발생할 경우 latch: in memory undo latch 대기 이벤트가 발생한다.
HW락 경합을 줄이는 방법
오라클 9i 이상이면 ASSM을 사용한다.
버젼과 무관하게 적절한 크기의 익스텐트를 사용한다.
오라클 8i 이상이면 LMT(Locally Managed Tablespace)를 사용한다.
enq: ST - contention, enq: TT - contention
테이블스페이스 관리 기법
관리기법 | UET$(Used Extend)
FET$(Free Extent)
DML | 설명 |
DMT
(Dictionary Managed Tablespace) | O (사용됨) | UET$,FET$ 등 Extend 관련 딕셔너리 테이블들에 Extend를 관리하기 때문에
Extend 변경이 있을때마다 해당 테이블을 조회하고 변경하는 작업이 필요하다.
UET$,FET$,DML이 수차례씩 발생함 |
LMT
(Locally Managed Tablespace) | X (사용안됨) | Extend에 대한 정보를 데이터파일헤더의 비트맵으로 관리하여
$UET$,$FET$ 작업불필요 |
ST락 경합을 줄일 수 있는 세가지 방법
LMT 기능 추가
TT락의 사용 확대
ST락 : 인스턴스별로 하나만 존재
TT락 : 테이블스테이블별로 하나씩 존재
Temporary tablespace 도입
Permanent Tablespace(영구 테이블스페이스)를 정렬영역으로 사용할 경우 정렬 수행에 따른 과도한 익스텐드의 할당과 해제는
ST락의 경합을 유발하여 큰 성능 저하를 발생시킨다.
SMON의 정렬영역을 정리하기 위해서 ST락을 대기하는 경우 치명적인 성능저하를 일으킬 수 있다.
ST락 경합 현상은 오라클 8i 이후로는 거의 이슈가 되지 않는다.
결론
오라클 8i 이상으로 업그레이드하고, LMT와 임시 테이블스페이스 기능을 사용한다.
enq: US - contention
AUM(Automatic Undo Management) 사용시 Undo Segment가 Online/Offline 되는 시점
인스턴스 기동
데이타베이스를 OPEN하는 과정에서 언두 세그먼트를 Online 시킨다.
Undo Tablespace 를 변경할 때
alter system set undo_tablespace = xxxx
기존 언두 세그먼트 : Offline 된다.
신규 언두 세그먼트 : Online 시킨다.
트랜잭션의 증가와 감소
트랜잭션 양이 빠른속도로 증가하여 기존 언두 세그먼트만으로 트랜잭션을 감당할 수 없을때
새로운 오프라인 상태의 언두 세그먼트를 온라인화 시키거나
새로운 언두 세그먼트 생성한다.
일정 시간 트랜잭션이 없거나 즐어들면 오라클은 언두 세그먼트를 오프라인 시킨다.
US락
US락 : 언두 세그먼트를 Online/Offline 시키는 과정을 동기화하기 위해 해당작업을 수행하는 서버 프로세스나 백그라운드 프로세스가 획득하는 락
서버 프로세스는 트랜잭션을 시작하는 시점에 언두 세그먼트를 할당받아야 하는데
사용 가능한 언두 세그먼트가 존재하지 않을 경우
언두 세그먼트를 신규로 생성하거나
오프라인 상태의 언두 세그먼트를 온라인 시켜야 한다.
10511 이벤트
study/oracle/adv_owi_10g/segment_wait_event.1250745911.txt.gz · 마지막으로 수정됨: 2009/08/20 14:25 저자 starlits