반응형
오라클 데이터베이스에서 파티셔닝은 대용량 테이블과 인덱스를 관리하기 위한 강력한 기능입니다. 이 블로그에서는 오라클 파티셔닝의 개념, 유형, 이점, 그리고 구현 방법에 대해 자세히 살펴보겠습니다.
파티셔닝이란?
파티셔닝은 대규모 테이블이나 인덱스를 더 작고 관리하기 쉬운 단위(파티션)로 나누는 기법입니다. 각 파티션은 독립적으로 관리될 수 있으며, 자체적인 이름을 가지고 있고, 고유한 저장 특성을 가질 수 있습니다.
파티셔닝의 이점
- 가용성 향상: 개별 파티션의 유지보수가 가능하여 전체 테이블의 가용성이 향상됩니다.
- 성능 개선: 쿼리가 관련 파티션만 스캔하므로 성능이 향상됩니다.
- 관리 용이성: 대용량 데이터를 더 작은 단위로 관리할 수 있습니다.
- 백업 및 복구 효율성: 파티션 단위로 백업 및 복구가 가능합니다.
파티셔닝의 주요 유형
1. 범위 파티셔닝 (Range Partitioning)
날짜나 숫자 범위를 기준으로 데이터를 나눕니다.
CREATE TABLE sales (
sale_id NUMBER,
sale_date DATE,
amount NUMBER
)
PARTITION BY RANGE (sale_date) (
PARTITION sales_q1_2023 VALUES LESS THAN (TO_DATE('01-APR-2023', 'DD-MON-YYYY')),
PARTITION sales_q2_2023 VALUES LESS THAN (TO_DATE('01-JUL-2023', 'DD-MON-YYYY')),
PARTITION sales_q3_2023 VALUES LESS THAN (TO_DATE('01-OCT-2023', 'DD-MON-YYYY')),
PARTITION sales_q4_2023 VALUES LESS THAN (TO_DATE('01-JAN-2024', 'DD-MON-YYYY'))
);
2. 리스트 파티셔닝 (List Partitioning)
특정 값 목록을 기준으로 데이터를 나눕니다.
CREATE TABLE customers (
customer_id NUMBER,
name VARCHAR2(100),
region VARCHAR2(20)
)
PARTITION BY LIST (region) (
PARTITION region_east VALUES ('New York', 'New Jersey', 'Virginia'),
PARTITION region_west VALUES ('California', 'Oregon', 'Washington'),
PARTITION region_central VALUES ('Texas', 'Illinois', 'Missouri')
);
3. 해시 파티셔닝 (Hash Partitioning)
해시 함수를 사용하여 데이터를 균등하게 분산시킵니다.
CREATE TABLE orders (
order_id NUMBER,
customer_id NUMBER,
order_date DATE
)
PARTITION BY HASH (order_id)
PARTITIONS 4;
4. 복합 파티셔닝 (Composite Partitioning)
두 가지 이상의 파티셔닝 방법을 조합합니다.
CREATE TABLE sales (
sale_id NUMBER,
sale_date DATE,
customer_id NUMBER
)
PARTITION BY RANGE (sale_date)
SUBPARTITION BY HASH (customer_id)
SUBPARTITIONS 4 (
PARTITION sales_q1_2023 VALUES LESS THAN (TO_DATE('01-APR-2023', 'DD-MON-YYYY')),
PARTITION sales_q2_2023 VALUES LESS THAN (TO_DATE('01-JUL-2023', 'DD-MON-YYYY')),
PARTITION sales_q3_2023 VALUES LESS THAN (TO_DATE('01-OCT-2023', 'DD-MON-YYYY')),
PARTITION sales_q4_2023 VALUES LESS THAN (TO_DATE('01-JAN-2024', 'DD-MON-YYYY'))
);
파티션 관리
파티션 추가
ALTER TABLE sales ADD PARTITION sales_q1_2024
VALUES LESS THAN (TO_DATE('01-APR-2024', 'DD-MON-YYYY'));
파티션 분할
ALTER TABLE sales SPLIT PARTITION sales_q4_2023 AT
(TO_DATE('01-DEC-2023', 'DD-MON-YYYY'))
INTO (PARTITION sales_oct_nov_2023, PARTITION sales_dec_2023);
파티션 병합
ALTER TABLE sales MERGE PARTITIONS sales_q1_2023, sales_q2_2023
INTO PARTITION sales_half1_2023;
파티션 교환
CREATE TABLE sales_q1_2023_temp AS SELECT * FROM sales PARTITION(sales_q1_2023);
ALTER TABLE sales EXCHANGE PARTITION sales_q1_2023 WITH TABLE sales_q1_2023_temp;
파티션 프루닝 (Partition Pruning)
파티션 프루닝은 쿼리 최적화 기법으로, 오라클이 관련 없는 파티션을 제외하고 필요한 파티션만 스캔하도록 합니다.
-- 이 쿼리는 sales_q1_2023 파티션만 스캔합니다
SELECT * FROM sales
WHERE sale_date BETWEEN TO_DATE('01-JAN-2023', 'DD-MON-YYYY')
AND TO_DATE('31-MAR-2023', 'DD-MON-YYYY');
파티셔닝 사용 시 고려사항
- 파티션 키 선택: 데이터 분포와 액세스 패턴을 고려하여 선택해야 합니다.
- 파티션 수: 너무 많은 파티션은 관리 오버헤드를 증가시킬 수 있습니다.
- 파티션 경계: 데이터 분포에 맞게 적절히 설정해야 합니다.
- 인덱스 전략: 글로벌 인덱스와 로컬 인덱스의 사용을 적절히 조절해야 합니다.
오라클 파티셔닝은 대용량 데이터 관리에 필수적인 기능입니다. 적절히 사용하면 성능, 가용성, 관리 용이성을 크게 향상시킬 수 있습니다. 하지만 파티셔닝 전략은 신중히 계획되어야 하며, 데이터의 특성과 비즈니스 요구사항을 충분히 고려해야 합니다.
반응형