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 |
댓글