사용자 도구

사이트 도구


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락 경합을 줄이는 방법

  1. FREELISTS 값을 동시 트랜잭션의 수를 고려해서 충분히 잡아준다.
    default 값이 1로 되어 있으므로 꼭 변경해 주어야 한다.
  2. _BUMP_HIGHWATER_MARK_COUNT(하나의 프리리스트당 HWM을 이동하는 크기 결정하는 값) Hidden parameter 값을 크게 설정한다.
    예) FREELISTS = 10 이고 _BUMP_HIGHWATER_MARK_COUNT = 20 이면 , 한번에 200블록(10 * 20)만큼 HWM이 이동하게 된다.
  3. 적절한 크기의 익스텐드를 사용한다.
    1. 대부분 Extent Management Local Uniform Size 를 5M 정도로 설정할 것을 권고한다.

HW락

  1. HW락 : HWM을 여러 프로세스가 동시에 변경하는 것을 막기 위한 락
    1. 대량의 Insert 를 할 경우 (대부분의 경우)
    2. 대량의 Update 를 할 경우 Undo Segment 에서 HW락 경합현상이 발생하는 경우
  2. IMU(In-memory Undo) : 10g이상부터 추가된 기능으로,
    언두 데이타를 Undo Segment가 아닌 Shared Pool 내의 KTI-UNDO 영역에 저장하는 기능
    1. Undo Segment 확장에 의한 HW락 경합이 이전 버젼에 비해 줄어드는 효과
    2. Undo block 을 읽고 쓰는 작업이 줄어들어 시스템 전체의 성능개선효과
    3. 동일한 KTI-UNDO영역을 사용하기 위해 경합이 발생할 경우 latch: in memory undo latch 대기 이벤트가 발생한다.

HW락 경합을 줄이는 방법

  1. 오라클 9i 이상이면 ASSM을 사용한다.
  2. 버젼과 무관하게 적절한 크기의 익스텐트를 사용한다.
  3. 오라클 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락 경합을 줄일 수 있는 세가지 방법

  1. LMT 기능 추가
  2. TT락의 사용 확대
    1. ST락 : 인스턴스별로 하나만 존재
    2. TT락 : 테이블스테이블별로 하나씩 존재
  3. Temporary tablespace 도입
    1. Permanent Tablespace(영구 테이블스페이스)를 정렬영역으로 사용할 경우 정렬 수행에 따른 과도한 익스텐드의 할당과 해제는
      ST락의 경합을 유발하여 큰 성능 저하를 발생시킨다.
    2. SMON의 정렬영역을 정리하기 위해서 ST락을 대기하는 경우 치명적인 성능저하를 일으킬 수 있다.
  4. ST락 경합 현상은 오라클 8i 이후로는 거의 이슈가 되지 않는다.
오라클 8i 이상으로 업그레이드하고, LMT와 임시 테이블스페이스 기능을 사용한다.

enq: US - contention

AUM(Automatic Undo Management) 사용시 Undo Segment가 Online/Offline 되는 시점

  1. 인스턴스 기동
    1. 데이타베이스를 OPEN하는 과정에서 언두 세그먼트를 Online 시킨다.
  2. Undo Tablespace 를 변경할 때
    1. alter system set undo_tablespace = xxxx
    2. 기존 언두 세그먼트 : Offline 된다.
    3. 신규 언두 세그먼트 : Online 시킨다.
  3. 트랜잭션의 증가와 감소
    1. 트랜잭션 양이 빠른속도로 증가하여 기존 언두 세그먼트만으로 트랜잭션을 감당할 수 없을때
      1. 새로운 오프라인 상태의 언두 세그먼트를 온라인화 시키거나
      2. 새로운 언두 세그먼트 생성한다.
    2. 일정 시간 트랜잭션이 없거나 즐어들면 오라클은 언두 세그먼트를 오프라인 시킨다.

US락

  1. US락 : 언두 세그먼트를 Online/Offline 시키는 과정을 동기화하기 위해 해당작업을 수행하는 서버 프로세스나 백그라운드 프로세스가 획득하는 락
  2. 서버 프로세스는 트랜잭션을 시작하는 시점에 언두 세그먼트를 할당받아야 하는데
    사용 가능한 언두 세그먼트가 존재하지 않을 경우
    언두 세그먼트를 신규로 생성하거나
    오프라인 상태의 언두 세그먼트를 온라인 시켜야 한다.
10511 이벤트
  1. 시스템의 속성상 트랜잭션의 변동량이 크고 이로 인해 US락 경합이 계속해서 발생한다면 10511 이벤트를 수행한다.
  2. 10511 이벤트는 SMON이 언두 세그먼트를 오프라인 시키는 기능을 수행하지 않도록 하는 역할을 한다.
study/oracle/adv_owi_10g/segment_wait_event.txt · 마지막으로 수정됨: 2009/08/20 14:26 저자 starlits