인덱스 크기 산정
Tibero DB 인덱스 크기 산정 방법에 대해 설명합니다.
사전 정보
Tibero에서 인덱스 크기 산정에 필요한 사전 정보로 Key Column 총 길이, Base RowID 산정 기준 그리고 항목별 크기 산정 정보가 필요합니다.
아래는 Key Column 총 길이, Base RowID 산정 기준 그리고 항목별 크기 산정의 예입니다.
Key Column 총 길이
인덱스 크기를 산정하기 위해서는 컬럼의 데이터 타입별 실제 소비 크기와 저장되는 길이을 산정해야하며 이 정보는 인덱스 크기를 산정하기 위한 항목별 크기 산정방법에 사용됩니다. 인덱스 크기를 산정할 때 컬럼에 지정된 데이터 타입별 저장되는 크기 산정이 필요합니다.
아래는 컬럼 정의 및 계산 방식의 예입니다. 크기 산정 테이블은 5개의 컬럼으로 구성되었다고 가정합니다.
이름
데이터타입
데이터길이
비고
c1
CHAR(10)
10
c2
DATE
8
c3
NUMBER(7,2)
4
roundup(7/2)
c4
CHAR(500)
500
c5
VARCHAR(3000)
2,100
3,000*0,7
Key Column 총 길이
18
c1 + c2
"데이터 타입별 크기 산정"의 데이터 타입별 사이즈 표를 참고하여 위 테이블을 구성하는 각 컬럼의 데이터 타입별 실제 소비사이즈를 산정한 수치입니다. 자세한 항목별 수치 산정 방법은 "Row의 데이터길이"를 참고합니다.
Base RowID 산정 기준
크기 선정 대상인 위 테이블의 인덱스는 Local Index와 Not Unique Index로 선별 되었습니다.
Name
Type
데이터길이
비고
A
Global Index
10
Global, Local 선별
Unique Index
6
Global, Local 선별
B
Unique Index
0
Unique, Not Unique 선별
Not Unique Index
1
Unique, Not Unique 선별
Base RowID 총 길이
8
A + B의 합계
항목별 크기 산정
인덱스 크기를 산정하기 위해 필요한 항목은 아래와같습니다.
크기 예는 각 항목별로 기본으로 정해진 크기, 파라미터로 설정할 수 있는 크기와 운영할 시스템에서 사전 조사된 수 치를 나타냅니다.
항목
크기 예
단위
설명
Row Directory
2
bytes
기본값: 2
Index Header
2
bytes
기본값: 2
250bytes 이하 컬럼 개수
2
개수
위의 Key Column 총 길이 테이블에 c1, c2 가 대상이다.
250bytes 초과 컬럼 개수
0
개수
Block Size
8192
개수
기본값: 8192 (파라미터)
Block Header
224
bytes
INITRANS
2
개수
기본값: 2 (파라미터)
PCTFREE
10
%
기본값: 10% (파라미터)
ITL공간
48
bytes
24 * 2 (24 * INITRANS)
초기 예상 건수
100,000
Rows
사용자 환경
월중 예상 추가 건수
20,000
Rows
사용자 환경
데이터 보관 월 수
120
개월
사용자 환경
Base RowID
7
bytes
6 + 1
인덱스 크기 산정방법
본 절에서는 Tibero에서 인덱스 크기를 산정하는 방법을 설명합니다.
한 Index Entry의 저장에 필요한 공간
산정 공식
Row Directory + Index Header + Base RowID
+ Key Column 총 길이 + (1 * <250bytes 이하 컬럼개수>) + (3 * <250bytes 초과 컬럼개수>)
항목
사전 정보 크기
실제 저장 크기
비고
Row Directory
2
2
Index Header
2
2
Base RowID
7 7
6 +1
Key Column 총 길이
18
18
250bytes 이하 컬럼개수
2
1 * 2
1 * 250bytes 이하 컬럼개수
250bytes 초과 컬럼개수
0
3 * 0
3 * 250bytes 초과 컬럼개수
Index Entry Space
31
2+2+7+18+(1*2)+(3*0)
한 블록의 데이터 공간
산정 공식
(Block Size - Block Header - ITL 공간) * (100 - PCTFREE) / 100
항목
사전 정보 크기
실제 저장 크기
비고
Block Size
8192
8192
Block Header
224
224
ITL공간
48
48
24 * 2 (24 * INITRANS)
PCTFREE
10
10
Data Space per Block
7,128
(8192-224-48)*(100-10)/100
한 블록에 들어가는 Entry 개수
산정 공식
/Data Space per Block / Index Entry Space (한 블록의 데이터 공간
/ 한 Index Entry의 저장에 필요한 공간)
항목
사전 정보 크기
실제 저장 크기
비고
Data Space per Block
7,128
7,128
Index Entry Space
31
31
Entry Size per Block
229.9355
7,128 / 31
총 데이터 Row 개수
산정 공식
초기 예상 건수 + 월중 예상 추가 건수 * (데이터 보관 월 수 + 1)
항목
사전 정보 크기
실제 저장 크기
비고
초기 예상 건수
100,000
100,000
월중 예상 추가 건수
20,000
20,000
데이터 보관 월 수
120
120+1
<데이터 보관 월 수> + 1
Total Row Size
2,520,000
100,000 + 20,000 * (120+1)
Index Leaf 블록에 필요한 Index Branch 블록의 비율
Leaf Block 일정수마다 Branch Block이 생성됩니다.
"필요한 총 데이터 공간"의 산정방식 (Block Size * (A+B)) 중 A는 Leaf Block을 B는 Branch Block을 의미합니다.
산정 공식
1 / Entry Size per Block (1 / 한 블록에 들어가는 Entry 개수)
항목
사전 정보 크기
실제 저장 크기
비고
Entry Size per Block
229.9355
229.9355
Index Branch Ratio
0.004349046
1 / 229.9355
필요한 총 데이터 공간
산정 공식
Block Size *( Total Row Size / Entry Size per Block + Total Row Size
/ Entry Size per Block ^ 2 )
항목
사전 정보 크기
실제 저장 크기
비고
Block Size
8,192
8,192
Total Row Size
2,520,000
2,520,000
Entry Size
per Block
229.9355
229.9355
Total Index Size
90,161,152
8192*(TRUNC(2520000/229.9355,0)
+TRUNC(2520000/229.9355^2,0))
Index Split이 일어난 경우
Index Split이 일어난 경우 실제 블록의 50% 공간만 차지하게 되므로 사용 공간 최대 값은 최종 계산 결과 * 2를 해 줍니다.
인덱스의 경우 Create Index로 데이터를 처음 적재하는 경우 PCTFREE로 지정된 비율을 제외하고 블록을 최 대한 사용하여 데이터를 저장합니다.
인덱스 생성 이후 신규로 인덱스 키 데이터가 추가되는 경우 해당 인덱스 키가 추가되어야 하는 블록에 여유 공 간이 없을 때 SPLIT이 발생하게 됩니다.
SPLIT이 발생하게 되면 새로운 블록이 할당되고 기존 블록에 있던 인덱스 키 데이터를 통상 5:5 비율로 분할하 여 나누어 가지기 때문에 두 개의 블록에 빈 공간이 50% 생깁니다.
따라서, 인덱스에 데이터 추가가 계속된다고 하면 특정 시점 이후에 Index Split이 얼마나 발생했는지는 정확하게 예측하기는 어렵습니다. 다만, 처음 SPLIT이 발생된 이후, 다음 번 SPLIT이 발생되기까지 빈 공간이 0% ~ 50% 범위에서 유지되기 때문에 평균적으로 절반 정도의 블록이 SPLIT이 되어 있다라고 가정하는 것이 가장 근사하게 추정하는 방법일 것입니다.
Index Size시트의 크기 산정 방식에서 최종 계산 결과(Total Table Size for Index Spli)에 2를 곱한 것은 모 든 블록이 SPLIT되어 있을 때 최대 사용공간을 가정하여 산출한것이며 만약 평균 개념으로 추정한다면 1.5를 곱해서 계산하는 것이 현실적일 수 있습니다.
산정 공식
Index Split이 일어난 경우 데이터 공간 = Total Index Size * 2 (필요한 총 데이터 공간 * 2 )
항목
사전 정보 크기
실제 저장 크기
비고
Total Index Size
90,161,152
90,161,152
Total Index Size for Index Split
180,322,304
90,161,152 *2
Last updated