SQL

오라클 파티셔닝

class="song" 2026. 1. 30.
728x90

오라클 파티셔닝(Partitioning): 대용량 테이블을 관리하기 쉽게 작은 조각으로 나누는 기술

- 수억, 수십억 건의 데이터가 쌓인 거대 테이블을 통쨰로 관리하면 조회도 느리고(Full Scan 부하), 삭제도 오래걸림
- 이를 해결하기 위해 논리적으로는 하나의 테이블이지만, 물리적으로는 여러 개의 작은 테이블(파티션)로 쪼개서 저장하는 것
- 핵심은 나누어 정복하는것(Divide and Conquer)

파티셔닝을 쓰는 이유

1) 성능(Performance) - 파티션 프루닝(Pruning)
    - 가장 중요한 이유
    - SQL에서 WHERE 날짜 = "202401" 조건을 주면 오라클은 2024년 1월 데이터가 들어있는 특정 파티션만 읽고, 나머지 파티션은 Skip함
    - 이를 Partition Pruning이라고 하며, I/O를 획기적으로 줄일 수 있음

2) 관리 편의성(Manageability)
    - 데이터를 지울 때 엄청난 차이
        - 일반 테이블: DELETE FROM log WHERE date < "20230101";
            - 한줄 한줄 지우면ㅅ서 로그를 남기느라 시간을 많이 소비함

        - 파티션 테이블: ALTER TABLE log DROP PARTITION p_202212;
            - 파일 자체를 통째로 날려버림
            - 로그를 남기지 않아 1초 만에 삭제

3) 가용성(Avaliability)
    - 하나의 파티션이 깨져도, 나머지 파티션은 정상적으로 조회 가능

파티셔닝의 종류

1) Range Partition(범위) - 가장 흔함
    - 기준: 숫자나 날짜의 범위(연속된 값)

    - 예시 ; 주문일자 컬럼 기준
        - P_2023_01: 1월 데이터
        - P_2023_02: 2월 데이터

    - 용도: 이력성 데이터(로그, 주문 내역) 관리에 필수

2) List Partition(목록)
    - 기준: 불연속적인 특정 값의 목록

    - 예시: 지역 컬럼 기준
        - P_SEOUL: "서울", "경기"
        - P_BUSAN: "부산", "경남"

    - 용도: 지역별, 부서별로 데이터 분포가 명확할 때


3) Hash Partition(해시)
    - 기준: 해시 함수를 돌려 랜덤하게 분산

    - 예시: 고객 ID 기준
        - P1, P2, P3, P4에 고객들을 공평하게 나누어 담음

    - 용도
        - 데이터 관리 목적보다는 성능(I/O 분산) 목적
        - 특정 파티션에 몰리는 형상(Hot Block)을 막고, 병렬 처리(Paarallel Query) 성능 극대화할 때 사용
        - 단점: 범위 조회(Range Scan)에는 불리



4) Composite Partition(복합)
    - 기준: 두 가지를 섞어 사용 (Main + Sub)

    - 예시: 먼저 주문일자로 Range 파티션을 나누고(월별), 그 안에서 다시 고객 ID로 Hash 파티션을 나눔

    - 용도: 관리(삭제) 편의성과 성능(분산)을 모두 잡고 싶 을 때 사용

파티션 인덱스 (Local VS Global)

1) Local Index - 기본값(추천)
    - 구조: 파티션 테이블과 1:1로 똑같이 쪼개진 인덱스

    - 장점: 파티션 하나를 DROP해도, 해당 파티션의 인덱스만 같이 사라지고 나머지는 멀쩡함, 관리 쉬움

    - 비유: 각 권(Volume)마다 맨 뒤에 색인이 따로 붙어있는 백과사전


2) Global Index
    - 구조: 테이블은 쪼개져있는데 인덱스는 하나로 통합 되어 있는 형태

    -단점: 파티션 하나를 DROP하면, 전체 인덱스가 사용 불가(Unusable) 상태가 되어버림(인덱스 다시만들어야함)
728x90

'SQL' 카테고리의 다른 글

아카이브 모드(Archive Mode)  (0) 2026.02.04
[Oracle] VirtualBox에 RHEL8+Oracle 19c 설치  (0) 2026.02.03
오라클 아키텍처  (0) 2026.01.29
오라클 데이터베이스 저장 구조  (0) 2026.01.29
Database 기초  (0) 2026.01.29

댓글