테이블 크기 계산 방법
1) 총 블럭 헤더 크기를 계산
TOTAL BLOCK HEADER = BLOCK HEADER, PART A + BLOCK HEADER, PART B
BLOCK HEADER, PART A = (FIXED HEADER + VARIABLE TRANSACTION HEADER)
BLOCK HEADER, PART B = (TABLE DIRECTORY + ROW DIRECTORY)
- FIXED HEADER : 57 BYTE (고정된 블럭 헤드)
- VARIABLE TRANSACTION HEADER : 23 * I (I는 해당 TABLE의 INITRANS의 값)
- TABLE DIRECTORY : 4
- ROW DIRECTORY : 2*R (R : R(AVG.# OF ROWS/BLOCK) 데이터 블록 내의 평균 ROW 수 )
2) 데이터 블럭 당 사용 가능한 데이터 영역을 계산
AVAILABLE DATA SPACE = (BLOCK SIZE - TOTAL BLOCK HEADER) - ((BLOCK SIZE - BLOCK HEADER, PART A) * (PCTFREE/100))
- BLOCK SIZE : 데이터베이스의 블럭 크기 (SVRMGRL의 SHOW PARAMETER에서 DB_BLOCK_SIZE를 확인)
3) 평균 ROW의 전체 컬럼의 길이를 계산
ROW 길이를 계산하기 위하여 테이블 정의에서 컬럼 수, 각 컬럼의 데이터 타입, 가변 길이 컬럼의 평균 크기 등을 참조한다.
D(DATA SPACE/AVERAGE ROW) : 테이블의 ROW의 평균 길이
4) 총 평균 ROW 크기를 계산
BYTE/ROW = ROW HEADER + F + V + D
- ROW HEADER : ROW당 3BYTES (NON-CLUSTERED TABLE)
- F : 250 BYTES 이하를 사용하는 컬럼의 TOTAL LENGTH BYTES (각 컬럼 당 1 BYTE)
- V : 250 BYTES 이상를 사용하는 컬럼의 TOTAL LENGTH BYTES (각 컬럼 당 3 BYTE)
- D : D(DATA SPACE/AVERAGE ROW 평균 ROW의 전체 컬럼의 길이)
5) 데이터 블록 내의 평균 ROW 수를 계산
R(AVG.# OF ROWS/BLOCK) = AVAILABLE SPACE / AVERAGE ROW SIZE
- AVAILABLE SPACE : AVAILABLE DATA SPACE (데이터 블럭 당 사용 가능한 데이터 영역)
- AVERAGE ROW SIZE : BYTE/ROW (총 평균 ROW 크기)
6) 테이블에서 요구되는 블럭과 바이트 수를 계산
BLOCKS FOR TABLE = # ROWS / R
# ROWS : 테이블의 ROW 수
R : R(AVG.# OF ROWS/BLOCK) 데이터 블록 내의 평균 ROW 수
BYTES FOR TABLE = # BLOCKS FOR TABLE * BLOCK SIZE