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 분산) 기법입니다. 단, 나중에 "서울 손님만 모이세요!" 하고 찾을 수는 없습니다.