- 데이터베이스에서 파티션은 대용량의 테이블이나 인덱스를 작은 논리적 단위인 파티션으로 나누는 것을 말한다.
- 대용량 DB의 경우 중요한 몇 개의 테이블에만 집중되어 데이터가 증가되므로, 이런 테이블들을 작은 단위로 나눠 분산시키면 성능 저하를 방지할 뿐만 아니라 데이터 관리도 쉬워진다.
- 테이블이나 인덱스를 파티셔닝 하면 파티션키* 또는 인덱스키에 따라 물리적으로 별도의 공간에 데이터가 저장된다.
- 데이터 처리는 테이블 단위로 이뤄지고, 데이터 저장은 파티션별로 수행된다.
- 장점
- 데이터 접근 시 액세스 범위를 줄여 쿼리 성능이 향상된다.
- 파티션별로 데이터가 분산되어 저장되므로 디스크의 성능이 향상된다.
- 파티션별로 백업 및 복구를 수행하므로 속도가 빠르다.
- 시스템 장애 시 데이터 손상 정도를 최소화할 수 있다.
- 데이터 가용성이 향상된다.
- 파티션 단위로 입·출력을 분산시킬 수 있다.
- 단점
- 하나의 테이블을 세분화하여 관리하므로 세심한 관리가 요구된다.
- 테이블간 조인에 대한 비용이 증가한다.
- 용량이 작은 테이블에 파티셔닝을 수행하면 오히려 성능이 저하된다.
- 파티션의 종류는 파티셔닝 방식에 따라 범위 분할, 해시 분할, 조합 분할, 목록 분할, 라운드 로빈 분할 등으로 나뉜다.
- 범위 분할 (Range Partitioning)
- 지정한 열의 값을 기준으로 범위를 지정하여 분할한다.(일별, 월별, 분기별 등)
- 해시분할 (Hash Partitioning)
- 해시 함수를 적용한 결과 값에 따라 데이터를 분할한다.
- 특정 파티션에 데이터가 집중되는 범위 분할의 단점을 보완한 것으로, 데이터를 고르게 분산할 때 유용하다.
- 특정 데이터가 어디에 있는지 판단할 수 없다.
- 고객번호, 주민번호 등과 같이 데이터가 고른 컬럼에 효과적이다.
- 조합 분할 (Composite Partitioning)
- 범위 분할로 분할한 다음 해시 함수를 적용하여 다시 분할하는 방식이다.
- 범위 분할한 파티션이 너무 커서 관리가 어려울 때 유용하다.
- 목록 분할 (List Partitioning)
- 지정한 열 값에 대한 목록을 만들어 이를 기준으로 분할한다.('국가'라는 열에 '한국', '미국', '일본'이 있는 경우 '미국'을 제외할 목적으로 '아시아'라는 목록을 만들어 분할함
- 라운드 로빈 분할(Round Robin Partitioning)
- 레코드를 균일하게 분배하는 방식이다.
- 각 레코드가 순차적으로 분배되며, 기본키가 필요없다.
- 범위 분할: '판매일자' 필드를 기준으로 연도별로 파티션을 나눈다.
- 해시분할: 해시 함수(FX)에 판매일자 필드를 인수로 입력하여 그 결과값에 따라 파티션을 나눈다.
- 조합 분할: '판매일자 필드를 기준으로 연도별로 파티션을 나눈 다음 하나의 파티션 안에서 다시 해시 함수를 적용하여 다시 파티션을 나눈다.
- 파티션키는 테이블 접근 유형에 따라 파티셔닝이 이뤄지도록 선정한다.
- 데이터 관리의 용이성을 위해 이력성 데이터는 파티션 생성주기와 소멸주기를 일치시켜야 한다.
- 매일 생성되는 날짜 컬럼, 백업의 기준이 되는 날짜 컬럼, 파티션 간 이동이 없는 컬럼, I/O 병목을 줄일 수 있는 데이터 분포가 양호한 컬럼 등을 파티션키로 선정한다.
- 인덱스 파티션은 파티션된 테이블의 데이터를 관리하기 위해 인덱스를 나눈 것이다.
- 인덱스 파티션은 파티션된 테이블의 종속 여부에 따라 Local Partitioned Index 와 Global Partitioned Index로 나뉜다.
- Local Partitioned index: 테이블 파티션과 인덱스 파티션이 1:1 대응되도록 파티셔닝한다.
- Global Partitioned index: 테이블 파티션과 인덱스 파티션이 독립적으로 구성되도록 파티셔닝한다.
- Local Partitioned Index가 Global Partitioned Index에 비해 데이터 관리가 쉽다.
- Local Partitioned index: 파티션과 인덱스를 모두 '판매일자' 필드를 기준으로 수행한다.
- Global Partitioned index: 파티션은 '판매일자' 필드를 기준으로 수행하고, 인덱스는 '지점' 필드를 기준으로 수행한다.
- 인덱스 파티션은 인덱스 파티션키 컬럼의 위치에 따라 Prefixed Partitioned Index와 Non-prefixed Partitioned Index로 나뉜다.
- Prefixed Partitioned Index: 인덱스 파티션키와 인덱스 첫 번째 컬럼이 같다.
- Non-Prefixed Partitioned Index: 인덱스 파티션키와 인덱스 첫 번째 컬럼이 다르다.
파티션 인덱스 유형 인덱스 파티션키 인덱스키 컬럼 Prefixed Parttioned Index 판매일자 판매일자(+품목코드) Non-Prefixed Partitioned Index 판매일자 품목코드(+거래일자) - Local과 Global, Prefixed와 Nonprefixed를 조합하여 Local Prefixed Partitioned Index, Local Non-Prefixed Partitioned Index, Global Prefixed Partitioned Index등으로 구성하여 사용한다.