파티션 종류 및 개념 알아보기(Hash Partition, List partition, composite partition) :: 개발/일상_Mr.lee

파티션 종류 및 개념 알아보기(Hash Partition, List partition, composite partition)

Posted by Mr.mandu.
2019. 11. 5. 06:00 개발/DB

안녕하세요.

계속해서 파티션(partition)에 대하여 알아보고 있습니다.

파티션에 사용되는 파티셔닝 기법이라는 것과

실제 쿼리 작성하여 실습을 통해 range 파티션을 알아보았습니다.

이전 포스팅 글 입니다.


[개발/DB] - [오라클(oracle)] range 파티션(partition) 알아보기

[개발/DB] - [오라클(oracle)] 파티션 테이블을 개념(테이블 파티셔닝)


이번 포스팅에서는 실습을 진행하지 않을 것입니다.

이유는, 앞서 실습을 통해 알아봤던 range 파티션을 실습해보니..... 부분적으로 캐치만 하면 다른 파티션 기법을 사용할 수 있다고 생각하기 때문입니다.


지금부터 다른 파티션에 대해 알아보겠습니다.


range partition(범위 파티션)  - 복습

장점 : 사용하고 관리하기 쉬움

단점 : 데이터가 균일하게 분포되지 못해서 성능 저하가 있을 수 있음

ex)년도별로 판매테이블 파티셔닝 할 경우

-> 판매가 많이 된 년도에는 데이터가 많아서 작업 속도가 느려질 것이고, 

판매량이 적은 년도는 데이터가 적어서 빨리 조회되는 등의 단점이 있음


이와같은 문제점으로 Hash partition(해쉬 분할)이 등장하게 되었습니다.

HASH PARTITION(8i 버전부터 지원)

개념 및 장점 : Hash 함수가 데이터를 각 테이블스페이스 별로 균등하게 분포시키켜 성능을 향상 시킴

단점 : 사용자가 데이터를 분산하지 않고 Hash 함수가 분산시키기 때문에 데이터의 관리 등이 매우 어려움


LIST PARTITIION(목록 분할 파티션)

List partition(목록 분할 파티션)

개념 : 파티셔닝 할 항목을 관리자가 직접 지정하는 방식임

장점 : 잘 설정할 경우 빠른 성능 보장됨

단점 : 잘못 설정될 경우 성능 저하됨

ex) A제품용 파티션을 별도로 생성했으나 판매 부진으로 판매량이 없음


COMPOSITE PARTITION(복합 파티션)

개념 : 지금까지 언급해온 파티션들을 복합적으로 사용하는 것

지원 형태 : 오라클 버전별로 다름

 ☞ 8i : range - hash

 ☞ 9i : range - list 추가지원

 ☞ 11g : range - range, list - range, list- list, list - hash 추가지원


 ○ Range - Hash 파티션

   - 개념 : 일자별로 먼저 파티셔닝을 하고 그 안에 또 Hash 파티셔닝을 하는 방법

   - 단점 : 데이터가 어느 파티션에 속할지 제어할 수 없음

   - 예를들면, 판매 테이블을 분기별로 파티셔닝 한 후 각 분기마다 hash 파티셔닝을 한번 더하는 것

     (이전 포스팅에서 range 파티션을 이용하여 분기별로 나눴음)

   - 복합 파티션은 처음임으로 예시 쿼리를 적어보겠습니다.

 create table panmae

(

pdate varchar2(8), 

pcode number(3), 

pqty number(5)

)

partition by range(pdate)

subpartition by hash(pcode)

subpartitions 4

(

partition q1 values less than ('20100401') tablespace ts_t1,

partition q2 values less than ('20100701') tablespace ts_t2,

partition q3 values less than ('20101001') tablespace ts_t3,

partition q4 values less than ('20110101') tablespace ts_t4,

);


 ○ Range - List 파티션

   - 개념 : 각 row가 어느 파티션에 속할지 알 수 있음

 create table panmae

(

pdate varchar2(8), 

pcode number(3), 

pqty number(5)

)

partition by range(pdate)

subpartition by list (pcode)

(

partition q1 values less than ('20100401') tablespace ts_t1

 (subpartition 파티션 value ('1'),

subpartition 파티션2 value ('2'),

subpartition 파티션3 value ('3')),

partition q2 values less than ('20100701') tablespace ts_t2

 (subpartition 파티션 value ('1'),

subpartition 파티션2 value ('2'),

subpartition 파티션3 value ('3')),

partition q3 values less than ('20101001') tablespace ts_t3

 (subpartition 파티션 value ('1'),

subpartition 파티션2 value ('2'),

subpartition 파티션3 value ('3')),

);


 ○ Interval Partition(11g New Feature)

   - 개념 : Range의 확장형으로 파티션의 범위를 벗어난 데이터가 입력될 경우 에러가 발생하지 않고

               오라클이 필요한 파티션을 스스로 생성한 후 데이터 입력


제가 이러한 파티셔닝 기법을 활용하여 데이터를 다루는 그날이 왔으면 좋겠네요.

모두 좋은 하루 보내세요.