본문 바로가기

프로그래밍/데이터베이스

[Oracle] 오라클 파티션(PARTITION) 개념 및 종류 (Oracle PARTITION)

반응형

오라클 파티션이란?

오라클 파티션(PARTITION)은 테이블이나 인덱스를 논리적으로 분할하여 관리와 성능을 향상시키는 기법이다.

예를 들어, 수백만 건 이상의 데이터가 있는 큰 테이블을 파티션으로 나누면, 특정 데이터를 빠르게 조회하고 관리하기가 쉬워진다.

🔹 파티션을 쓰면 좋은 경우

    • 데이터가 매우 크고 주기적으로 관리가 필요할 때 (월별, 연도별 데이터 등)
    • 특정 기간 데이터를 자주 조회하거나 삭제할 때
    • 성능을 개선하고 백업과 복구를 효율적으로 수행하고 싶을 때

🔹 파티션의 장점

  • 쿼리 성능 향상 (특정 파티션만 검색 가능)
  • 데이터 관리 용이성 (불필요한 데이터 삭제 용이)
  • 데이터 가용성 증가 (부분적인 장애가 전체에 영향을 덜 줌)

예제 테이블

SALE_ID SALE_DATE AMOUNT
1 2024-01-15 1000
2 2024-02-10 2000
3 2024-02-20 1500
4 2024-03-05 3000

오라클 파티션의 종류 및 사용 방법

1. 범위 파티션 (RANGE PARTITION, 가장 많이 사용)

▶ 사용 방법

데이터의 범위(예: 날짜나 번호)에 따라 테이블을 나누는 방식이다.

  • 기존 테이블에 파티션 추가
ALTER TABLE sales
PARTITION BY RANGE (sale_date) (
    PARTITION sales_jan VALUES LESS THAN (TO_DATE('2024-02-01', 'YYYY-MM-DD')),
    PARTITION sales_feb VALUES LESS THAN (TO_DATE('2024-03-01', 'YYYY-MM-DD')),
    PARTITION sales_mar VALUES LESS THAN (TO_DATE('2024-04-01', 'YYYY-MM-DD'))
);

▶ 파티션 조회

SELECT * FROM sales PARTITION(sales_jan);
-- 결과:
-- SALE_ID | SALE_DATE  | AMOUNT
-- 1       | 2024-01-15 | 1000

SELECT * FROM sales PARTITION(sales_feb);
-- 결과:
-- SALE_ID | SALE_DATE  | AMOUNT
-- 2       | 2024-02-10 | 2000
-- 3       | 2024-02-20 | 1500

2. 해시 파티션 (HASH PARTITION)

▶ 사용 방법

데이터를 균등하게 분산시키는 방식으로, 특정 컬럼의 해시값을 기준으로 나눈다.

  • 기존 테이블에 파티션 추가
ALTER TABLE sales_hash
PARTITION BY HASH (sale_id)
PARTITIONS 4;

▶ 파티션 조회 (해시 파티션은 직접적인 파티션 이름 조회보단 전체에서 분산 확인)

SELECT sale_id, sale_amount FROM sales_hash;
-- 결과 (예시):
-- SALE_ID | SALE_AMOUNT
-- 1       | 1000
-- 2       | 1500
-- 3       | 2000
-- (파티션 내부 분산은 DBA_TAB_PARTITIONS 등에서 확인 가능)

 

3. 리스트 파티션 (LIST PARTITION)

▶ 사용 방법

특정 값의 목록에 따라 나누는 방식으로 국가 코드, 지역 코드 등을 활용할 때 유용하다.

  • 기존 테이블에 파티션 추가
ALTER TABLE region_sales
PARTITION BY LIST (region_code) (
    PARTITION asia VALUES ('KR', 'JP', 'CN'),
    PARTITION europe VALUES ('UK', 'FR', 'DE')
);

▶ 파티션 조회

SELECT * FROM region_sales PARTITION(asia);
-- 결과:
-- SALE_ID | REGION_CODE
-- 10      | KR
-- 11      | JP

SELECT * FROM region_sales PARTITION(europe);
-- 결과:
-- SALE_ID | REGION_CODE
-- 12      | UK
-- 13      | FR

 

파티션 관리 및 조회 방법

🔸 파티션 추가

※ 아래 예시는 "범위 파티션(RANGE PARTITION)"을 사용하는 테이블에 새로운 범위 구간을 추가하는 경우.

※ 기존 파티션이 RANGE 방식일 때만 이런 방식으로 파티션을 추가할 수 있다.

ALTER TABLE sales ADD PARTITION sales_apr VALUES LESS THAN (TO_DATE('2024-05-01', 'YYYY-MM-DD'));
-- 이 구문은 범위 파티션(RANGE PARTITION) 방식에서만 사용할 수 있습니다.
-- 예: sales_apr 파티션은 '2024-04-01 ~ 2024-04-30' 범위의 데이터를 포함하게 됨

 

🔸 파티션 삭제

ALTER TABLE sales DROP PARTITION sales_jan;

🔸 파티션 사용 확인하기

EXPLAIN PLAN FOR
SELECT * FROM sales
WHERE sale_date BETWEEN TO_DATE('2024-02-01', 'YYYY-MM-DD') AND TO_DATE('2024-02-28', 'YYYY-MM-DD');

SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);
-- 결과에서 PARTITION RANGE SINGLE 또는 PARTITION RANGE ALL이 나오면 정상

정리

  • 범위 파티션: 날짜나 숫자 범위로 데이터 관리 (가장 일반적)
  • 해시 파티션: 데이터 균등 분산 목적
  • 리스트 파티션: 특정 값 기준으로 데이터 관리

오라클에서 파티션을 제대로 활용하면 관리 편의성뿐만 아니라 성능까지 크게 끌어올릴 수 있다.

반응형