□ 파티셔닝(Partitioning)
○ 개요
하나의 테이블이나 인덱스를 동일한 논리적 속성을 가진 여러 단위로 나누어 각각이 별도의 물리적 속성을 갖게 하는 것
○ 장점
- 데이터 접근시 스캔 범위를 줄여 성능 향상
- 데이터 훼손 가능성 저하 및 데이터 가용성 향상
- 각 파티션별 백업 및 복구작업 가능
- 테이블 파티션 단위로 디스크 I/O를 분산하여 부하 저하
○ 파티셔닝 종류(오라클 기준)
- 레인지 파티셔닝(Range Partitioning)
· 특정 컬럼 값을 기준으로 분할
· 주로 순차적인 데이터(historical data)를 관리하는 테이블에 사용
ex) '가입계약관리' 테이블에서는 통상 최근 1~2년치만 접근
· 각 범위에 따라 데이터 분포도가 일정치 않음
· DDL 스크립트
CREATE TABLE TEST_TABLE
(I_YYYYMMDD VARCHAR2(8), I_CUSTOMER VARCHAR2(9), …… )
TABLESPACE TBS1
STORAGE (INITIAL 2M NEXT 2M PCTINCREASE 0)
PARTITION BY RANGE (I_YYYYMMDD) <- 파티셔닝 컬럼(16개 까지 지정 가능)
(PARTITION PAR_200307 VALUES LESS THAN (‘20030801’),
PARTITION PAR_200308 VALUES LESS THAN (‘20030901’), …… )
- 해시 파티셔닝(Hash Partitioning)
· 특정 컬럼 값에 해시 함수를 적용해 분할(데이터 관리보다 성능향상에 중점)
· 분포도를 정의하기 어려운 테이블을 파티셔닝할 때 많이 사용(균등한 분포도를 가질 수 있도록 조율, 주로 2의 배수로 파티셔닝)
· 해시 파티셔닝으로 구분된 파티션들은 동일한 논리, 물리 속성을 가지며 파티션에 지정된 값들을 DMBS가 결정하기때문에 각 파티션에 어떤 값이 들어있는지 알 수 없음
· DDL 스크립트
CREATE TABLE TEST_TALBE
( SERIAL NUMBER, CODE VARCHAR2(4), ……)
TABLESPACE TBS1
STORAGE (INITIAL 2M NEXT 2M PCTINCREASE 0)
PARTITION BY HASH(SERIAL)
(PARTITION PAR_HASH_1 TABLESPACE TBS2,
PARTITION PAR_HASH_2 TABLESPACE TBS3, ……)
- 리스트 파티셔닝(List Partitioning)
· 특정 컬럼의 특정 값을 기준으로 파티셔닝
· 주로 이질적인 값이 많지 않고 분포도가 비슷하며 해당 컬럼의 조건이 많이 들어오는 경우에 사용
ex) '서비스 계약' 테이블에서 서비스 가입 대리점을 A, 서비스 변경 대리점을 B라고 할 때, 모든 서비스 처리 데이터에는 대리점 타입이 두 가지 존재하고 대부분 조회 패턴에는 두 대리점을 구분하는 값이 주어지게 됨
· DDL 스크립트
CREATE TABLE SERVICE_CONTRACT
(I_YYYYMMDD VARCHAR2(8), I_CUSTOMER VARCHAR2(6),
I_DLR_IND VARCHAR2(2), I_DEALER VARCHAR2(6), …….)
TABLESPACE TBS1
STORAGE (INITIAL 2M NEXT 2M PCTINCREASE 0)
PARTITION BY LIST (I_DLR_IND)
(PARTITION PAR_A VALUES (‘A’), PARTITION PAR_S VALUES (‘S’))
- 레인지-해시 컴포지트 파티셔닝(Range-Hash Composite Partitioning)
· 레인지 방식으로 데이터를 파티셔닝하고 각 파티션 내에서 해시 방식으로 서브 파티셔닝을 적용하는 방식 → 서브 파티션이 독립된 세그먼트가 되는 것이 특징
· 레인지 파티셔닝으로 관리와 성능 이슈 향상, 해쉬 파티셔닝으로 데이터 균등 배치와 병렬화, 서브 파티션에 특정 테이블 스페이스 지정가능, 서브 파티션별 풀 스캔을 할 수 있어 스캔 범위 줄이는 효과
· DDL 스크립트
CREATE TABE TB_RANGE_HASH
(I_YYYYMMDD VARCHAR2(8), I_SERIAL NUMBER, SALE_PRICE NUMBER, ……)
TABLESPACE TBS1
STORAGE (INITIAL 2M NEXT 2M PCTINCREASE 0)
PARTITION BY RANGE (I_YYYYMMDD)
SUBPARTITION BY HASH (I_SERIAL)
(PARTITION SALES_1997 VALUES LESS THAN (‘19980101’)
(SUBPARTITION SALES_1997_Q1 TABLESPACE TBS2,
SUBPARTITION SALES_1997_Q2 TABLESPACE TBS3), ……)
'DB' 카테고리의 다른 글
DataWarehouse 란? (0) | 2019.03.07 |
---|---|
Resource Manager (0) | 2019.02.09 |
PL/SQL 조건, 반복 제어문 (0) | 2017.08.05 |
PL/SQL 구조와 변수 (0) | 2017.08.03 |
PL/SQL 시작하기 (0) | 2017.07.18 |