181. 해시 파티셔닝 (Hash Partitioning) - 해시 함수 기준 분할

핵심 인사이트: "날짜로 쪼개기엔 애매하고, 특정 지역으로 쪼개기엔 서울 데이터만 1,000만 건이라 한쪽 서버만 터질 것 같다." 이때 DB의 '해시 함수'라는 주사위를 굴려서, 데이터를 4개의 파티션(서랍)에 기가 막히게 1/4씩 '균등 분산'시키는 마법이 해시 파티셔닝이다.

Ⅰ. 해시 파티셔닝(Hash Partitioning)의 개념

테이블의 파티션 키(Partition Key) 컬럼 값에 데이터베이스 내부의 해시 함수(Hash Function) 를 적용하여, 반환된 해시 값에 따라 데이터를 여러 파티션에 균등하게 흩뿌려 저장하는 파티셔닝 기법입니다. 레인지(Range)나 리스트(List) 파티셔닝처럼 개발자가 명시적으로 데이터의 저장 위치를 제어할 수는 없지만, 데이터를 가장 고르게 분산시킬 수 있습니다.

Ⅱ. 해시 파티셔닝의 주 목적: 데이터 쏠림(Data Skew) 방지

날짜나 지역 코드를 기준으로 데이터를 쪼개면 특정 날짜나 특정 지역에만 데이터가 비정상적으로 몰리는 현상이 발생할 수 있습니다. 해시 파티셔닝은 고객ID(Customer_ID)주문번호(Order_ID) 같은 고유한 값을 해시 함수에 통과시켜, 물리적으로 분리된 디스크(또는 파티션)에 데이터를 1/N로 완벽하게 균등 분산시키는 것이 최우선 목적입니다. (I/O 병목 방지)

Ⅲ. 해시 파티셔닝의 생성 예시

CREATE TABLE customers (
    customer_id NUMBER,
    customer_name VARCHAR2(50),
    join_date DATE
)
PARTITION BY HASH (customer_id) ( -- ◀ 파티션 키를 고객ID로 설정
    PARTITIONS 4                  -- ◀ 해시 함수를 돌려 4개의 파티션으로 균등 분할
);
  • 고객 ID가 1001인 데이터가 들어오면 내부 해시 로직에 의해 1번 파티션으로, 1002는 3번 파티션으로 골고루 나뉘어 들어갑니다. (파티션 개수는 주로 2의 거듭제곱으로 설정함)

Ⅳ. 해시 파티셔닝의 장점과 치명적 단점

구분설명
장점 (I/O 분산)- 병렬 처리(Parallel Processing) 시 여러 디스크에서 동시에 데이터를 읽고 쓸 수 있어 대용량 배치 성능이 극대화됩니다.
단점 1: 프루닝 제약- 해시 함수는 동등(=, IN) 조건에서만 작동합니다. 만약 WHERE customer_id BETWEEN 1 AND 100처럼 범위 검색을 하면, 1~100이 어느 파티션에 들어갔는지 알 수 없어 전체 파티션을 다 뒤지는(Full Scan) 대참사가 일어납니다.
단점 2: 관리 불가- 특정 년도나 특정 고객 데이터만 쏙 빼내어 백업하거나 삭제(Drop)하는 등의 관리 작업이 불가능합니다.

📢 섹션 요약 비유: 은행 창구에서 손님을 지역별로 나누면 서울 창구만 미어터집니다(데이터 쏠림). 해시 파티셔닝은 번호표 기계(해시 함수)를 둬서 "1번 손님은 1번 창구, 2번 손님은 2번 창구..." 식으로 4개의 창구에 손님을 칼같이 1/4로 나눠 앉히는(I/O 분산) 기법입니다. 단, 나중에 "서울 손님만 모이세요!" 하고 찾을 수는 없습니다.