미스터 역마살
[오라클] 테이블 파티셔닝(Table Partitioning) 본문
♣ 파티셔닝 이란?
지속적으로 증가하가나 용량이 큰 테이블들을 파티션이라는 보다 작은 단위로 나눔으로써 성능이 저하되는 것을
방지하고 관리를 보다 수월하게 하고자 하는것을 파티셔닝이라고 한다.
♣ 파티셔닝이 필요한 이유
1) 관리적 측면 : 파티션 단위 백업, 추가, 삭제, 변경등
2) 성능적 측면 : 파티션 단위 조회 및 DML 수행.
♣ 파티션 기본구조
1) 수동파티셔닝
- 파티션 뷰를 통해 파티션 기능을 구현했으며 이를 수동 파티셔닝이라고 부른다.
- 파티션 뷰의 핵심 기능은 뷰쿼리에 사용된 조건절에 부합하는 테이블만 읽는다는 데에 있으며,
이를 파티션 Pruning이라고 하며, 파티션 Pruning의 필수조건은 체크제약(Check constraint)을 설정 하는 것이다.
2) 파티션 테이블
- 오라클 8i에서 도입된 파티션 테이블 기능을 이용하면 훨씬 간편하게 파티션을 정의 할 수 있을 뿐만 아니라
기능적으로도 더 낫다.
- 파티셔닝은 내부에 몇개의 세그먼트를 생성하고 그것들이 논리적으로 하나의 오브젝트임을 메타정보로 딕셔너리에
저장해 두는 것에 지나지 않는다.
- 파티션 되지 않은 일반테이블 일때는 테이블과 세그먼트가 1:1 관계지만 파티션 테이블일 경우는 1:M 의 관계이며,
이는 인덱스 파티셔닝 또한 마찬가지다.
♣ 파티션 유형
- RANGE 파티셔닝(8이상)
- 해시 파티셔닝(8i 이상)
- 리스트 파티셔닝 (9i 이상)
- Range - 해시 파티셔닝 (8i 이상)
- Range 리스트 파티셔닝 (9i 이상)
- Range-Range 파티셔 닝 (l1g 이 상)
- 리스트-해시 파티셔닝 (l1g 이상)
- 리스트 리스트 파티셔닝 (l1g 이상)
- 리스트-Range 파티셔닝 (l1g 이상)
♣ Range 파티셔닝
- 오라클 8버전 부터 제공된 가장 기본적인 파티셔닝 방식으로 주로 아래와 같이 날짜 컬럼을 기준으로 한다.
- 파티셔닝 테이블에 값을 입력하면 각 레코드를 파티션 키 컬럼 값에 따라 분할 저장하고 읽을때도 검색조건을
만족하는 파티션만 읽을 수 있어 이력성 데이터 조회시 성능을 크게 향상 시켜준다.
- 파티션 키로는 1~16개 까지 등록 가능하다.
♣ 해시 파티셔닝
- 파티션 키에 해시함수를 적용한 결과 값이 같은 레코드를 같은 파티션 세그먼트에 저장해두는 방식이며 주로
고객ID처럼 변별력이 좋고 데이터 분포가 고른 컬럼을 파티션 기준으로 선정해야 효과적이다.
- 해시 파티셔닝의 경우 Range와 리스트 파티셔닝과는 달리 파티션 개수만 사용자가 결정하고 데이터를
분산시키는 해싱 알고리즘은 오라클에 의해 결정되기 때문에 데이터 분포를 신중히 생각하여야 한다.
♣ 리스트 파티셔닝
- 9i 부터 시작되 리스트 파티셔닝은 사용자에 의해 미리 정해진 그룹핑 기준에 따라 데이터를 분할 저장하는
방식이다.
- Range 파티션에서는 값의 순서에 따라 저장할 파티션이 결정되지만 리스트 파티션은 순서와 상관없이
불연속적인 값의 목록으로서 결정된다.
- Range 파티션과는 달리 리스트 파티셔닝에는 단일 컬럼만드로 파티션 키를 지정 할 수 있다.
♣ 결합 파티셔닝
- 결합 파티셔닝을 구성하면 서브 파티션 마다 세그먼트를 하나씩 할당 하고, 서브 파티션 단위로 데이터를
저장한다. 즉 주 파티션 키에 따라 1차적으로 데이터를 분배하고 서브 파티션키에 따라 최종적으로 저장할
위치를 결정한다.
♣ 11g에 추가된 파티션 유형
1) Reference 파티셔닝
= 부모테이블 파티션 키를 이용해 자식 테이블을 파티셔닝하는 기능이 Reference 파티셔닝 이다.
2) interval 파티셔닝
= 파티션 생성시 interval 기준을 정의 함으로써 정해진 간격으로 파티션이 자동 추가되도록 할 수 있다.
특히 테이블을 일단위로 파티셔닝 했을때 유용하다.
★ 본 내용은 '오라클 성능 고도화 원리와 해법 2' 를 보고 공부한 내용을 정리한 것 입니다.
자세한 내용은 책을 참고하세요.
-끝-
'Database > ORACLE' 카테고리의 다른 글
[ORCLE] 데이터베이스 아키텍처 (0) | 2016.07.28 |
---|---|
[ORACLE]인덱스 파티셔닝 (0) | 2016.07.27 |
[ORACLE] 인덱스 사용이 불가능한 경우와 인덱스 스캔방식의 종류 (0) | 2016.07.23 |
[ORACLE] 오렌지에 더미데이터(데이터샘플) 생성하기 (0) | 2016.07.23 |
해시테이블 자료구조 (0) | 2016.07.22 |