1.   Partitioning 정의

 

l  VLDB 환경에서 테이블의 크기가 수백 Giga 내지 Tera 경우, 테이블을 물리적으로 여러 개로 분리한다. 관리의 편리성, 성능, 가용성이 좋아진다.

l  테이블의 여러 파티션들은 테이블의 논리적인 attribute들은 공통으로 사용한다. 컬럼구성, 컬럼타입, column-level constraint, table-level constraint

l  파티션 별로 테이블의 물리적인 attribute 별도로 정의할 있다. PCTFREE, PCTUSED, INITRANS, MAXTRANS, STORAGE 파라메타, TABLESPACE

l  하나의 파티션은 하나의 Segment 저장된다.

l  파티션끼리는 독립성이 보장된다.

 

2.   Partitioning 하는 이유

 

2.1.    높은 가용성

 

l  하나의 파티션이 사용불가 상태이더라도 다른 파티션들은 사용할 있다.

l  파티션을 잘게 분할할수록 가용성은 높아진다. (Disk Striping 병용 가능)

l  파티션 단위로 backup & restore 있다.

 

2.2.  관리 용이

 

l  파티션은 테이블스페이스 간에 이동할 있다.

l  파티션은 독립적으로 add, drop, truncate 있다.

l  파티션의 분할 기준을 사용자가 지정할 있다.

 

2.3.  성능

 

l  파티션된 테이블을 액세스할 , 옵티마이저의 판단하에 필요없는 파티션은 액세스하지 않는다. -> Partition Pruning

l  파티션별로 서로 다른 access path 사용할 수도 있다. , 월별 파티션되어 있는 테이블을 액세스할 , 1월달 파티션은 full table scan으로, 2월달 파티션은 index scan으로 액세스할 있다.

l  파티션들은 병렬적으로 SELECT/INSERT/UPDATE/DELETE 있다. Parallel Query Parallel DML 가능.

l  파티션들은 물리적으로 다른 디스크 디바이스에 분할되어 I/O balancing 이룰 있다.

l  소팅을 위해 필요한 temporary space 적게 든다.

 

3.   Partition 설정 방법

 

3.1. Partition Column / Partition Key

 

l   파티션하는 기준이 되는 컬럼을 선정

l   16개의 컬럼까지 가능. (Primary key 컬럼이 16개까지 가능하다.)

l   파티션 컬럼들은 CREATE TABLE 절에 PARTITION BY RANGE (column_list) 명시한다.

l   파티션 컬럼이 multi-column으로 구성될 때에는 벡터(vector) 비교 규칙을 적용한다.

l   파티션 값은 VALUES LESS THAN (value_list) 명시한다.

l   파티션에 저장될 있는 값은 이전 파티션의 partition key 값과 해당 파티션의 partition key 까지이다. ( Bi <= partition key < Bj )

 

3.2. MAXVALUE 이용

 

l   파티션 값의 최대값을 모를 사용

l   파티션 컬럼이 멀티로 구성될 , MAXVALUE 주어진 컬럼 이후에 나오는 값은 의미가 없다. , (10,MAXVALUE,5) = (10,MAXVALUE,6) = (10,MAXVALUE,MAXVALUE)

 

3.3. NULL 저장

 

l  파티션 값이 NULL 들어올 때에는 MAXVALUE 주어진 파티션에 들어가고, 만약 MAXVALUE 파티션이 없다면 insert fail.

 

3.4. 제약사항

 

l   파티션되는 테이블은 LONG, LONG RAW, LOBs, object type 컬럼을 가지지 못한다.

l   파티션 컬럼이 DATE 타입인 경우 분할 기준이 되는 범위값에 대해 TO_DATE format mask 사용하여야 한다. 그렇지 않은 경우 partition pruning 불가.

l   비트맵 인덱스는 GLOBAL 구성할 없고, 항상 LOCAL 구성해야 한다.

l   파티션 테이블에 대해 rule base optimization 사용할 없다.

 

4.    파티션 테이블 선정 기준

 

아래의 항목들 중에서 하나라도 해당되는 테이블은 파티션의 대상이 있다.

 

l  건수가 매우 많고, 액세스 빈도가 높으며, 주로 특정 부분만 액세스되는 테이블

액세스 빈도가 높고, 트랜잭션들이 주로 최근 데이터들만 액세스하는 테이블. 보존주기가 영구 또는 5 이상이고, 데이터 건수가 시간이 지남에 따라 무한히 늘어날 소지가 있는 테이블. 예를 들어, 시간이 지남에 따라 쌓이는 로그성 테이블들.

l  온라인에서 매우 중요하게 액세스되는 테이블

온라인에서 빈번하게 액세스되고, 액세스의 중요도가 테이블. 테이블이 부분적으로 fail 나도 같은 테이블의 다른 데이터들은 액세스가 가능해야 하는 테이블은 파티션의 대상이 된다예를 들어, 매우 중요한 원장성 테이블들.

l  OPS 환경에서 노드로부터 동시에 DML 작업이 빈번하게 발생하는 테이블

OPS 환경에서 노드에서 동일한 테이블을 액세스할 ping 많이 발생하여 성능에 악영향을 미치므로 파티션한다. 이때 노드를 구분지을 있는 테이블 컬럼으로 파티션한다. 예를 들어, 계정계에서 예금 업무와 보험 업무가 동시에 건드리는 테이블.

 

5.    파티션 컬럼 선정 기준

 

테이블을 파티션하기 위해서는 특정 컬럼의 값을 기준으로 파티션한다. 다음의 기준을 반영하여 파티션 컬럼을 선정한다.

 

l  컬럼이 가지는 값의 범위가 명확히 구분지어져야 한다. 대개는 VARCHAR, NUMBER, DATE 타입의 컬럼으로 파티션한다. 파티션 컬럼에 대해 NULL 허용하나 가능한 NOT NULL 컬럼이 좋다.

l  파티션 사이즈가 예측 가능한 컬럼. 컬럼에 의해 테이블이 파티션된다고 가정했을 파티션의 PCTFREE, PCTUSED, MIN(MAX)EXTENTS 등의 물리적 파라메타들이 결정되어질 있어야 한다.

l  분포도가 양호하고, 비교적 많이 액세스되는 컬럼. 인덱스를 고려할 테이블과 동일하게 파티션되는 인덱스가 좋다.

l  파티션 컬럼은 이상 16 컬럼까지 가능하다.

사업자 정보 표시
(주)블루원 | 김홍태 | 서울특별시 용산구 원효로 4가 135 금홍 2빌딩 | 사업자 등록번호 : 106-86-76684 | TEL : 02-3272-7200 | Mail : support_ora@blueone.co.kr | 사이버몰의 이용약관 바로가기

+ Recent posts