데이터베이스

Oracle Partitioning (오라클 파티션)

Oracle Partitioning은 대용량 테이블과 인덱스를 여러 개의 파티션으로 나누어 관리하는 기술입니다. 이를 통해 쿼리 성능 향상, 병렬 처리 최적화, 관리 용이성 개선 등의 장점을 제공합니다.

1. 파티션 개념

  • 데이터를 논리적으로 여러 개의 파티션으로 나누어 저장하는 방식
  • 테이블과 인덱스를 물리적으로 여러 개의 세그먼트로 관리
  • 대량 데이터 처리가 용이하고, 특정 파티션만 액세스할 수 있어 성능 최적화 가능

2. 파티션 종류

Oracle에서는 여러 가지 파티션 방식을 제공하며, 데이터의 분할 기준에 따라 나뉩니다.

(1) RANGE PARTITION (범위 파티션)

  • 특정 범위(Range) 기준으로 데이터를 나누는 방식
  • 주로 날짜 또는 숫자 값을 기준으로 파티셔닝

📌 예제: 주문일(order_date)을 기준으로 분할

CREATE TABLE orders (
order_id NUMBER,
customer_id NUMBER,
order_date DATE,
amount NUMBER
)
PARTITION BY RANGE (order_date) (
PARTITION p_2023 VALUES LESS THAN (TO_DATE('2024-01-01', 'YYYY-MM-DD')),
PARTITION p_2024 VALUES LESS THAN (TO_DATE('2025-01-01', 'YYYY-MM-DD'))
);
  • p_2023: 2023년까지의 주문 데이터 저장
  • p_2024: 2024년 주문 데이터 저장

✔ 장점:

  • 날짜 기반 분석에 유용
  • 특정 기간의 데이터만 백업/삭제 가능

(2) LIST PARTITION (리스트 파티션)

  • 특정 목록(List) 기준으로 데이터를 나누는 방식
  • 국가, 지역, 제품 카테고리와 같은 값에 적합

📌 예제: 국가(region)를 기준으로 파티션 분할

CREATE TABLE customers (
customer_id NUMBER,
customer_name VARCHAR2(100),
region VARCHAR2(50)
)
PARTITION BY LIST (region) (
PARTITION p_korea VALUES ('KOREA'),
PARTITION p_usa VALUES ('USA'),
PARTITION p_others VALUES (DEFAULT)
);
  • p_korea: 한국 데이터 저장
  • p_usa: 미국 데이터 저장
  • p_others: 그 외 국가 데이터 저장

✔ 장점:

  • 특정 값 기반 데이터 조회 성능 향상
  • 특정 그룹별 관리 용이

(3) HASH PARTITION (해시 파티션)

  • 균등한 부하 분산이 필요한 경우 사용
  • 랜덤한 값(예: 고객 ID, 주문 ID) 등을 기준으로 분할
  • 파티션의 크기가 균등하게 유지됨

📌 예제: 고객 ID를 기준으로 해시 파티션 적용

CREATE TABLE transactions (
transaction_id NUMBER,
customer_id NUMBER,
amount NUMBER
)
PARTITION BY HASH (customer_id)
PARTITIONS 4;
  • 고객 ID를 기준으로 4개의 파티션에 랜덤하게 분배됨

✔ 장점:

  • 균등한 분산을 보장
  • 특정 데이터에 대한 I/O 부하 분산 효과

(4) COMPOSITE PARTITION (복합 파티션)

  • 두 개 이상의 파티션 방식을 결합하여 사용
  • RANGE + HASH, RANGE + LIST 등 다양한 조합 가능

📌 예제: 연도별(RANGE) + 고객 ID(HASH) 복합 파티션 적용

CREATE TABLE sales (
sale_id NUMBER,
sale_date DATE,
customer_id NUMBER,
amount NUMBER
)
PARTITION BY RANGE (sale_date)
SUBPARTITION BY HASH (customer_id)
SUBPARTITIONS 4 (
PARTITION p_2023 VALUES LESS THAN (TO_DATE('2024-01-01', 'YYYY-MM-DD')),
PARTITION p_2024 VALUES LESS THAN (TO_DATE('2025-01-01', 'YYYY-MM-DD'))
);

연도별로 1차 분할 (RANGE)

  • 각 연도 파티션 내부를 고객 ID 기준으로 다시 해시 분할 (HASH)

✔ 장점:

  • 대량 데이터 관리 최적화
  • 복합적인 조회 조건에도 성능 향상 가능

3. 파티션 프루닝 (Partition Pruning)

Partition Pruning(파티션 절단)은 불필요한 파티션을 자동으로 제외하여 성능을 최적화하는 기법입니다.
쿼리에서 특정 조건을 포함하면 해당 파티션만 접근하여 I/O 부하를 줄일 수 있음.

(1) RANGE PARTITION에서 프루닝 예제

SELECT * FROM orders WHERE order_date BETWEEN TO_DATE('2024-01-01', 'YYYY-MM-DD')
AND TO_DATE('2024-12-31', 'YYYY-MM-DD');

✔ 결과:

  • p_2024 파티션만 읽고, 다른 파티션(p_2023 등)은 읽지 않음 → I/O 최소화

(2) LIST PARTITION에서 프루닝 예제

SELECT * FROM customers WHERE region = 'KOREA';

✔ 결과:

  • p_korea 파티션만 접근 → 성능 향상

(3) HASH PARTITION에서 프루닝 예제

SELECT * FROM transactions WHERE customer_id = 12345;

✔ 결과:

  • customer_id 해시 값에 따라 특정 파티션에만 접근 → 랜덤 분산에도 불필요한 I/O 최소화

4. 파티션 관리

(1) 새로운 파티션 추가

ALTER TABLE orders ADD PARTITION p_2025 VALUES LESS THAN (TO_DATE('2026-01-01', 'YYYY-MM-DD'));
  • 새로운 연도 데이터 저장을 위한 파티션 추가

(2) 기존 파티션 삭제

ALTER TABLE orders DROP PARTITION p_2023;
  • 오래된 데이터 삭제 후 디스크 공간 회수 가능

(3) 파티션 병합 (MERGE)

ALTER TABLE orders MERGE PARTITIONS p_2023, p_2024 INTO PARTITION p_merged;
  • 기존 두 개의 파티션을 하나로 병합

(4) 파티션 데이터만 삭제

ALTER TABLE orders TRUNCATE PARTITION p_2023;
  • 특정 파티션의 데이터만 초기화 (테이블 전체 삭제 없이 가능)

5. 결론

✅ Oracle Partitioning은 대량 데이터의 효율적인 관리와 성능 최적화에 필수적인 기술
✅ 프루닝을 통해 쿼리 속도를 대폭 향상 가능
✅ RANGE, LIST, HASH, COMPOSITE 등의 파티션 기법을 적절히 활용하여 성능 개선 가능
✅ 불필요한 데이터 관리(삭제, 이동)도 쉽게 수행 가능

🎯 대용량 데이터 처리 및 분석 업무에서 반드시 고려해야 할 핵심 기술! 🚀

zerg96

Recent Posts

SQLD 핵심 개념, NULL·JOIN·윈도우 함수 8문제로 정리

SQLD에서 점수를 가르는 건 어려운 이론보다 NULL 처리, 조인 조건 위치, 윈도우 함수의 동작 같은…

4시간 ago

AI 때문에 디자이너 일자리 절반이 사라진다 — 지금 당장 바꿔야 할 것들

AI 이미지 생성 도구의 폭발적 보급으로 그래픽·콘텐츠 디자이너 일감이 실제로 줄고 있습니다. 어떤 직군이 먼저…

5시간 ago

전기차 소프트웨어 전쟁, 현대차가 테슬라를 이길 수 있을까

전기차 시장이 배터리 싸움에서 소프트웨어 전쟁으로 전환됐다. 테슬라의 AI·데이터 해자 vs 현대차의 SDV 전략, 진짜…

10시간 ago

미국 9월 생산자물가 1.3% 급등, 그런데 뉴욕증시는 올랐다: 10월 16일 간밤 시황

어제 미국에서 9월 생산자물가지수(PPI)가 나왔는데 숫자가 꽤 거칠었습니다. 그런데 간밤 뉴욕증시 3대 지수는 모두 올랐습니다.…

10시간 ago

9월 가계대출 9개월 만에 2.2조 감소, 신용대출 3조가 줄고 주담대는 3.3조 늘었다

가계대출이 오랜만에 줄었다는 소식에 대출 문턱이 낮아지는 거냐고 묻는 분들이 많습니다. 금융당국이 10월 15일 발표한…

11시간 ago

뉴욕은 올랐는데 코스피는 7.57% 폭락 마감, 오늘(16일) 개장 전 체크할 4가지

어제 코스피가 하루에 7% 넘게 빠졌다는 소식, 아침에 확인하고 놀라신 분들 많으실 텐데요. 그런데 밤사이…

11시간 ago