■ 파티션 개요
  오늘날 기업에서 관리하는 데이터는 수백테라 바이트에 이르는 데이터베이스를 관리한다. 하지만 이런 데이터들 중 몇몇의 Big Transaction Table이 거의 모든 데이터를 가지고 있고, 나머지 테이블들은 이 Big Transaction Table을 경유하여 액세스하는 용도로 사용된다.
이렇게 데이터 크기도 크고 중요한 Big Transaction Table을 관리하는 부분에서 Troubleshooting이 발생될 경우 데이터베이스의 성능 및 관리작업에 심각한 영향을 받을 수 있다.
이러한 리스크가 있는 Big Transaction Table을 보다 효율적으로 관리하기 위해 Table을 작은 단위로 나눔(파티셔닝)써 데이터 액세스 작업의 성능 향상을 유도하고 데이터 관리를 보다 수월하게 하고자 하는 개념임.


■ 파티션 테이블 장점
  □ 개선된 가용성
    - 파티션은 독립적으로 관리된다.
    - 백업 및 복구를 파티션별로 작업 할 수 있다.
    - 같은 테이블에서 Unavailable한 파티션은 다른 파티션에 영향을 주지 않는다.
  □ 관리의 용이성
    - 사용자가 지정한 값으로 파티션이 가능하다.
    - 테이블스페이스 간에 파티션 이동이 가능하다.
    - 파티션 레벨에서 DML(Select, Delete, Update)가 가능하다.
  □ 개선된 성능
    - 데이터를 액세스할 때 액세스하는 범위를 줄여 퍼포먼스 향상을 가져올 수 있다.
    - RAC 환경에서 인스턴스 간 블록 경합(Block Contention)을 감소시킨다.


■ 사용시 주의사항
  □ 관리적인 관점
    - 하나의 테이블을 세분화하여 관리하기 때문에 보다 세심한 관리가 요구된다.
    - 파티션을 잘못 구성 또는 관리하여 IU(Index Unusable)에 빠지는 것을 주의해야 한다.
  □ 사용적인 관점
    - 파티션 키로 나누어져 있는 테이블에 파티션 키를 조건으로 주지 않아 전체 파티션을 액세스하지 않도록 주의해야 한다.


■ 파티션 테이블 특징
  □ 파티션 테이블은 파티션 키 값에 의해 구성되며, 한 테이블 당 가능한 파티션은 이론적으로 65535개를 지원하나 실질적으로는 10000개까지만 생성 가능.
  □ 모든 파티션 테이블(또는 인덱스)은 같은 Logical Attribute를 가져야 한다.
  □ 모든 파티션 테이블(또는 인덱스)은 다른 Physical Attribute를 가져야 한다.
  □ 파티션 테이블은 'KEY', 'VALUES LESS THAN literal', 'Physical Attributes'로 구성된다.
  □ 'VALUES LESS THAN literal'절에서 'literal' 값에는 SQL Function을 지원한다.
  □ Composite Column구성은 16개까지 가능함


■ Range Partition

  □ 문법
SQL> CREATE TABLE table_name (...)
   PARTITION BY RANGE (key_column)
   (PARTITION partition_name1 VALUES LESS THAN (condition1) TABLESPACE tablespace_name1,
    PARTITION partition_name2 VALUES LESS THAN (condition2) TABLESPACE tablespace_name2,
    PARTITION partition_name3 VALUES LESS THAN (condition3) TABLESPACE tablespace_name3,
                                             ...
    PARTITION partition_name4 VALUES LESS THAN (MAXVALUE) TABLESPACE tablespace_name4);

  □ 특징
    - 분할키는 최대 16개 컬럼으로 생성 가능.
    - LONG, LONGRAW 분할 컬럼 설정 불가능.
    - 컬럼값이 NULL인 것은 MAXVALUE값에 해당.



■ Hash Partition

  □ 특징
    - 오라클 서버가 지정된 데이터파일에 적절히 나누어서 저장된다.
    - 해시 알고리즘에 의해 처리되므로 Range Partition보다 분포도가 훨씬 좋을 수 있다.

  □ 문법
SQL> CREATE TABLE table_name (...)
   PARTITION BY HASH (key_column) PARTITIONS [분할수]
   STORE IN (tablespace, ...);

또는

SQL> CREATE TABLE table_name (...)
   PARTITION BY HASH (key_column)
   (PARTITION partition_name1 TABLESPACE tablespace_name1,
    PARTITION partition_name2 TABLESPACE tablespace_name2,
                             ... );



■ List Partition

  □ 특징
    - 특정 컬럼의 특정 값으로 파티셔닝을 하는 방법
    - 연관되지 않은 데이터, 순서에 맞지 않는 데이터의 그룹핑을 쉽게 할 수 있다.
    - 각 값 별로 분포도가 비슷하며, 많은 SQL에서 해당 컬럼의 조건이 많이 들어오는 경우 유용함.
    - 각 파티션의 분포도가 현격한 차이가 발생하지 않도록 해야 한다.
    - 여러 컬럼으로 파티션 키 생성이 가능하지 않으며 오직 하나의 컬럼으로 구성되어야 한다.
    - 파티션 키 값은 널값 또한 명시 가능하며, 널값을 포함한 어떠한 값이라도 한번만 명시할 수 있다.
    - 대소문자를 구분함. 범위 외 문자 입력시 에러 발생함.

  □ 문법
SQL> CREATE TABLE table_name (...)
   PARTITION BY LIST (key_column)
   (PARTITION partition_name1 VALUES ('값1') TABLESPACE tablespace_name1,
    PARTITION partition_name2 VALUES ('값2','값3') TABLESPACE tablespace_name2,
                     ... );

Posted by 겨울섬
,