2010-12-07 7 views
7

명백한 것 외에도 다중 열 파티셔닝과 서브 파티셔닝의 차이점은 누구나 설명 할 수 있습니까? OLTP 시나리오에서 어느 것이 더 낫습니까? 자세한 내용은 Oracle Database Administrator 's Guide의 Managing Partitioned Tables and Indexes을 참조하십시오. 여러 칼럼에 파티션 테이블오라클 다중 열 파티셔닝 대 서브 파티션 사용

A (벙어리) 예제이다

CREATE TABLE demo1 
(
    year   NUMBER, 
    month   NUMBER, 
    day   NUMBER, 
    instance  NUMBER, /* assuming this can only be 1 or 2 */ 
    other1  VARCHAR2(50), 
    other2  VARCHAR2(50), 
    other3  VARCHAR2(50) 
) 
PARTITION BY RANGE (year,instance) 
(
    PARTITION data_2009_inst1 VALUES less than (2009,2) TABLESPACE data_2009, 
    PARTITION data_2009_inst2 VALUES less than (2009,3) TABLESPACE data_2009, 
    PARTITION data_2010_inst1 VALUES less than (2010,2) TABLESPACE data_2010, 
    PARTITION data_2010_inst2 VALUES less than (2010,3) TABLESPACE data_2010, 
    PARTITION data_2011_inst1 VALUES less than (2011,2) TABLESPACE data_2011, 
    PARTITION data_2011_inst2 VALUES less than (2011,3) TABLESPACE data_2011 
); 

마찬가지로 subpartitioned 테이블의 예이다 :

이제 이들 테이블 간의 차이가 무엇
CREATE TABLE demo2 
(
    year   NUMBER, 
    month   NUMBER, 
    day   NUMBER, 
    instance  NUMBER, /* assuming this can only be 1 or 2 */ 
    other1  VARCHAR2(50), 
    other2  VARCHAR2(50), 
    other3  VARCHAR2(50) 
) 
PARTITION BY RANGE (year) 
SUBPARTITION BY LIST (instance) /* Cannot subpartition by range in 10gR2 */ 
    SUBPARTITION template 
    (
     SUBPARTITION i1 VALUES (1), 
     SUBPARTITION i2 VALUES (2), 
     SUBPARTITION ix VALUES (DEFAULT) 
    ) 
(
    PARTITION data_2009 VALUES less than (2010) TABLESPACE data_2009, 
    PARTITION data_2010 VALUES less than (2011) TABLESPACE data_2010, 
    PARTITION data_2011 VALUES less than (2012) TABLESPACE data_2011 
); 

? 그들은 "논리적으로"같은 것이 아닌가? 시간이 지날수록 더 많은 파티션을 얻기 위해 demo1에서 파티션을 분할해야하므로 demo2에 파티션을 추가하는 것이 훨씬 쉽습니다. 어느 것이 OLTP 시나리오에서 더 낫습니까?

참고로 INSTANCE 번호를 파티셔닝하는 이유는 Oracle RAC와 관련이 있습니다. "인스턴스 블록"이 RAC 노드 간의 상호 연결을 통해 전송 될 필요가있을 때 데이터베이스를 느리게하는 것을 막기 위해 "인스턴스 선호도"를 만들려고합니다. (우리는 이것이 우리의 테스트에서 차이가 있음을 경험적으로 입증했다).

답변

2

아마도 귀하의 경우에는 차이가 없지만 일반적으로 하위 분할을 사용하면 range-hash, range-list와 같은 두 가지 방식으로 분할 할 수 있습니다. 하위 분할 영역 예제는 범위 목록이지만 단일 수준 범위 분할과 같습니다. 귀하의 하위 분할 사용하면 링크 된 문서에서이 예 같았다 경우, 단일 레벨을 사용할 수 없습니다 :

하위 파티션의
ALTER TABLE quarterly_regional_sales 
    ADD PARTITION q1_2000 VALUES LESS THAN (TO_DATE('1-APR-2000','DD-MON-YYYY')) 
     STORAGE (INITIAL 20K NEXT 20K) TABLESPACE ts3 NOLOGGING 
     (
      SUBPARTITION q1_2000_northwest VALUES ('OR', 'WA'), 
      SUBPARTITION q1_2000_southwest VALUES ('AZ', 'UT', 'NM'), 
      SUBPARTITION q1_2000_northeast VALUES ('NY', 'VM', 'NJ'), 
      SUBPARTITION q1_2000_southeast VALUES ('FL', 'GA'), 
      SUBPARTITION q1_2000_northcentral VALUES ('SD', 'WI'), 
      SUBPARTITION q1_2000_southcentral VALUES ('OK', 'TX') 
     ); 
0

하나의 장점은 하위의 개별 세밀하게 관리 할 수 ​​있다는 것입니다 파티션. 예를 들어 데이터 보관 테이블에서는 날짜뿐만 아니라 다른 값을 기반으로하는 보존 요구 사항이 있다고 말할 수 있습니다.

예를 들어 7 년 동안 값 인스턴스 = 1로 데이터를 유지해야하지만 인스턴스 = 2 인 데이터는 4 년 후에 폐기 될 수 있습니다. 하위 파티셔닝을 사용하면 instance = 2 인 데이터가 포함 된 하위 파티션을 다른 값과 별도로 삭제할 수 있습니다.