인덱스 크기 산정

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를 해 줍니다.

  1. 인덱스의 경우 Create Index로 데이터를 처음 적재하는 경우 PCTFREE로 지정된 비율을 제외하고 블록을 최 대한 사용하여 데이터를 저장합니다.

  2. 인덱스 생성 이후 신규로 인덱스 키 데이터가 추가되는 경우 해당 인덱스 키가 추가되어야 하는 블록에 여유 공 간이 없을 때 SPLIT이 발생하게 됩니다.

  3. 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