문서유형ㅣ기술정보
분야ㅣ 관리/환경설정
적용제품버전ㅣ T6, T7
문서번호ㅣTADTI162
개요
Tablespace의 구성과 각 구성 요소의 최대 크기에 대해 설명합니다.
방법
Tablespace
Tablespace 논리적 구성
세그먼트(Segment)
Extent들로 구성된 데이터를 저장하는 단위 중 하나입니다.
Segment는 Tablespace보다 작은 단위이므로 하나의 Segment는 하나의 Tablespace에만 속할 수 있으며, 단일 Tablespace의 최대 크기를 초과할 수 없습니다.
익스텐트(Extent)
연속된 Block들로 이루어진 단위입니다.
Tablespace 생성 시 EXTENT MANAGEMENT LOCAL에서 UNIFORM SIZE가 지정된 경우 해당 UNIFORM SIZE를 따르며, AUTOALLOCATE(기본값)일 경우에는 _TX_SGMT_ALLOC_SIZE(기본값 0) 설정에 따릅니다.
데이터 블록(Block)
데이터베이스에서 사용하는 데이터의 최소 단위입니다.
Tibero는 데이터를 Block 단위로 저장하고 관리합니다.
Tablespace 물리적 구성
Tablespace
이론적으로 최대 4G(2^32)개의 Block을 가질 수 있으며, 8KB Block 기준 약 32TB까지 구성할 수 있습니다.
또한 이론적으로 최대 1024개의 Datafile로 구성할 수 있습니다.
다만, Ulimit의 nofile 제한과 DB 생성 또는 Controlfile 재생성을 통한 MAXDATAFILES 제한에 영향을 받지 않는다는 가정 하에 DB에서 항상 보장하는 Datafile 수는 896개입니다.
따라서 실제 최대 사용 가능 용량은 32GB × 896 = 약 28TB입니다.
Datafile
Datafile은 DB 전체에서 고유한 Datafile ID인 absolute fileno(32bit)와 Tablespace 내에서의 file ID인 relative fileno(10bit, 0~1023)로 관리됩니다.
일반적인 환경에서 변환 속도를 높이기 위해 relative fileno 0~127은 absolute fileno 0~127과 동일하도록 구성됩니다.
이때 relative fileno는 0~127 구간에서는 중복이 불가능하며, 128부터는 중복이 가능합니다.
단, Temp Tablespace는 별도로 관리되며 최대 1024개까지 추가할 수 있습니다.
따라서 Temp Tablespace의 최대 용량은 1024 × 32GB = 32TB입니다.
SYSTEM, UNDO, SYSSUB, USR Tablespace에는 각각 1개의 Datafile이 생성되며 absolute fileno와 relative fileno가 모두 0~3으로 할당됩니다.
이론적으로 최대 1024개의 Datafile을 구성할 수 있으나, 할당할 수 없는 relative fileno 128개를 제외하면 실제로 사용할 수 있는 Datafile 수는 896개입니다.
최대 구성 확인 방법
128개 이상의 Datafile로 구성된 두 개의 Tablespace를 생성한 후 Controlfile dump를 통해 확인할 수 있습니다.
absolute fileno
FILE #ID 값으로 확인합니다.
(*data file sections의 값만 해당하며, *filenames sections의 FILE 값은 다른 값입니다.)relative fileno
rel_no = ID 값으로 확인합니다.
같은 라인에 표시되는 ts# 값을 통해 Tablespace를 구분할 수 있습니다.
relative fileno가 1023까지 모두 설정된 Tablespace에 Datafile을 추가하려고 할 경우 아래와 같은 오류가 발생합니다.
ERROR_TCCF_NO_DF_LEFT(-24017) - * action: Check the control file and try again.; 추가가 필요한 경우 신규 Tablespace 생성 및 Segment Move 필요
Datafile과 Extent
Extent 할당 크기
_TX_SGMT_ALLOC_SIZE 파라미터에 따라 Extent 할당 크기가 결정됩니다.
값은 16배수로 설정해야 하며, 0으로 설정된 경우 Segment Size에 따라 추가 할당되는 Extent 크기가 결정됩니다.
Datafile을 확장하기 전에 남아있는 공간을 먼저 사용하는 로직이 적용되므로, 중간에 서로 다른 Extent 크기를 가지는 Extent가 생성될 수 있습니다.
Segment Size에 따른 Extent 할당 크기 (8KB 기준)
| segment < 1MB | 128KB (16 개 블록)씩 할당 |
| 1MB <= segment < 64MB | 1MB (128 개 블록)씩 할당 |
| 64MB <= segment < 1GB | 8MB (1024 개 블록)씩 할당 |
| 1G < segment | 64MB (8192 개 블록)씩 할당 |
단, Tibero6 일부 버전에서는 Segment Size가 24GB를 초과하는 경우 Segment Size를 0으로 계산하여 다시 128KB부터 할당을 시작하는 현상이 존재합니다.
Datafile 공간과 Extent
Datafile의 남은 공간이 다음에 할당해야 하는 Extent 크기보다 작은 경우 다음과 같이 처리됩니다.
Datafile에 남아있는 연속 Block이 128KB(16개) 미만인 경우
→ Datafile Extend 또는 CANNOT EXTEND 오류가 발생합니다.16개 Block 미만의 공간은 할당할 수 없습니다.
예시)
1024 Block이 필요한 상황에서 550 Block만 남아있는 경우
540 Block보다 작은 512 Block만 할당됩니다.
(540 - 512 = 28)28 Block보다 작은 16 Block만 추가로 할당됩니다.
(28 - 16 = 12)남은 12 Block은 16 Block보다 작으므로 Datafile Extend 또는 CANNOT EXTEND 오류가 발생합니다.
Datafile Extend 방식
Datafile Extend는 autoextend로 지정된 사이즈의 배수만큼 확장됩니다.
autoextend가 4MB인 Datafile에서 1024 Block Extent를 할당해야 하는 경우
1024 Block은 8MB이므로 4MB의 2배인 8MB가 확장됩니다.autoextend가 5MB인 경우 10MB가 확장됩니다.
이 경우 5MB씩 두 번 확장되는 것이 아니라 한 번에 10MB가 확장됩니다.
8MB를 사용한 이후 다음 Extent를 할당하려고 하면 2MB만 남게 되므로 1024 Block 대신 256 Block이 할당됩니다.
Table
구성 및 크기
Table은 최소 하나의 Segment로 구성되며 Segment의 최대 크기 제한을 초과할 수 없습니다.
단일 테이블
단일 테이블은 하나의 Segment로만 구성됩니다.
최대 크기는 약 31.25TB입니다.
(SYS, SYSSUB, UNDO, USR Tablespace 제외, 1000개의 Datafile로 구성된 경우 기준)
Partition
Partition 또는 SubPartition은 각각 하나의 Segment로 구성됩니다.
크기
Table의 최대 크기는
28TB × N(Partition 또는 SubPartition 수) 만큼 확장될 수 있습니다.Header, PCT FREE, Row Chain(하나의 Row가 하나의 Block에 저장되지 못하고 여러 Block에 걸쳐 저장되는 경우), 단편화 등의 요소로 인해 실제 저장 가능한 데이터 크기는 계산된 최대 크기보다 작아질 수 있습니다.
Row 개수 자체에는 별도의 제한이 없습니다.