본문 바로가기

데이터베이스

HWM(High Water Mark)

HWM(High Water Mark)란?

  1. HWM(High Water Mark) 란 저장공간을 갖는 세그먼트 영역에서 사용한 적이 있는 Block과 사용한 적이 없는 Block 의 경계점을 의미한다.
    Block은 위에서 부터 채워진다.
  2. 데이타파일은 HWM을 가지지 않으며, 세그먼트만이 HWM를 가진다.

특성

  1. High Water Mark는 증가하기만 한다.
  2. Truncate 명령을 사용하면 Header Block 위치로 돌아오게 된다.(0으로 set)
  3. Delete 명령은 HWM의 변화를 주지 않는다.
  4. 5 block 씩 증가한다. (초기 5 block이 될때까지는 1 block씩 증가한다.)
  5. Table의 Full Scan량과 동일하다.
  6. USER_TABLES.AVG_SPACE의 기준이 된다.

관련 Data Dictionary

USER_TABLES.BLOCKS HWM와 같은 값으로 단위는 block 이다.
segment에 의해 사용된 적이 있는 block 수
USER_TABLES.EMPTY_BLOCKS 할당된 블록 중에서 HWM 위에 미사용으로 남아있는 공간의 블록 수.
HWM 위의 block
USER_TABLES.AVG_SPACE 한 블록당 평균 FREE SPACE SIZE.
단위는 Byte 이다.
Header Block을 제외한 HWM 안에 있는 Block들에 대해서 평균을 구하므로 오차가 있을 가능성이 많다.
테이블 사이즈 계산 테이블 사이즈 = (blocks + empty_blocks + 1) = 사용블록 + 비어있는블록 + segment head block(1)

HWM 측정방법

  1. 특정테이블의 HWM를 알기 위해서는 ANALYZE TABLE 명령을 수행하여 통계정보를 수집한다.
     ANALYZE TABLE <tablename> ESTIMATE/COMPUTE STATISTICS; 
  2. 수집한 통계정보를 가지고 HWM를 측정한다.
    SELECT blocks, empty_blocks, num_rows
    FROM user_tables
    WHERE table_name = <tablename>;
  3. 레코드를 삭제하는 것은 HWM의 위치를 아래로 옮기지 않는다.
    그러므로, 레코드를 삭제하는 것은 EMPTY_BLOCKS 의 수치를 늘리지 않는다.

TUNING

  1. 계산된 테이블사이즈가 세그먼트의 크기(USER_SEGMENTS.BLOCKS)와 다르면 Analyze를 다시 해주어야 한다.
  2. EMPTY_BLOCKS가 BLOCKS에 비해 너무 크면, INITIAL_EXTENT나 NEXT_EXTENT를 줄여야 한다.
  3. 입력된 데이터 건수에 비해 HWM가 너무 높다면 segment를 재생성을 고려해야 한다.
    이유는 실제 데이터 건수는 작은데 비해 Full Scan시에 HWM까지 검색해 Disk I/O가 많아져 부하가 증가하게 된다.
  4. USER_TABLES.AVG_SPACE가 너무 크면 테이블을 재생성해야 한다.
    PCT_USED와 PCT_FREE 의 중간 이상
    DB_BLOCK_SIZE * (100 - PCT_USED + PCT_FREE) / 200 

'데이터베이스' 카테고리의 다른 글

ASM(Automatic Storage Management)  (0) 2010.04.29
Online Tools :: SQL Injection Vulnerability Test  (1) 2010.04.29
Undo 와 Redo 의 차이점  (1) 2010.04.29