본문 바로가기

카테고리 없음

[Oracle] 오라클 데이터베이스의 파티셔닝: 상세 가이드

반응형

 

오라클 데이터베이스에서 파티셔닝은 대용량 테이블과 인덱스를 관리하기 위한 강력한 기능입니다. 이 블로그에서는 오라클 파티셔닝의 개념, 유형, 이점, 그리고 구현 방법에 대해 자세히 살펴보겠습니다.


파티셔닝이란?

파티셔닝은 대규모 테이블이나 인덱스를 더 작고 관리하기 쉬운 단위(파티션)로 나누는 기법입니다. 각 파티션은 독립적으로 관리될 수 있으며, 자체적인 이름을 가지고 있고, 고유한 저장 특성을 가질 수 있습니다.

파티셔닝의 이점

  1. 가용성 향상: 개별 파티션의 유지보수가 가능하여 전체 테이블의 가용성이 향상됩니다.
  2. 성능 개선: 쿼리가 관련 파티션만 스캔하므로 성능이 향상됩니다.
  3. 관리 용이성: 대용량 데이터를 더 작은 단위로 관리할 수 있습니다.
  4. 백업 및 복구 효율성: 파티션 단위로 백업 및 복구가 가능합니다.

파티셔닝의 주요 유형

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');

파티셔닝 사용 시 고려사항

  1. 파티션 키 선택: 데이터 분포와 액세스 패턴을 고려하여 선택해야 합니다.
  2. 파티션 수: 너무 많은 파티션은 관리 오버헤드를 증가시킬 수 있습니다.
  3. 파티션 경계: 데이터 분포에 맞게 적절히 설정해야 합니다.
  4. 인덱스 전략: 글로벌 인덱스와 로컬 인덱스의 사용을 적절히 조절해야 합니다.

오라클 파티셔닝은 대용량 데이터 관리에 필수적인 기능입니다. 적절히 사용하면 성능, 가용성, 관리 용이성을 크게 향상시킬 수 있습니다. 하지만 파티셔닝 전략은 신중히 계획되어야 하며, 데이터의 특성과 비즈니스 요구사항을 충분히 고려해야 합니다.

반응형