2016-09-07 3 views
0

현재 Oracle 12c에서 데이터 로딩 프로세스를 리팩토링 중이며 솔루션으로 파티셔닝을 탐색 중입니다. 내 데이터는 날짜별로 분류되며 날짜별로 ~ 500k 개의 레코드가 있는데, 이는 파티셔닝을위한 최소 최적 조건에 부합하는 것처럼 보입니다. 원래 계획은 스테이징 테이블을 사용하여 데이터를로드 한 다음 메인 테이블에 더미 파티션을 추가하고 파티션 교환을 수행하는 것이 었습니다. 그러나 내 데이터로드에는 하루가 아닌 며칠의 데이터가 포함됩니다. 삽입을 수행를 추가 :오라클 성능 : 파티션 분할 대 삽입 추가

옵션 1 : 예비 연구는이 문제를 해결하는 두 가지 방법이 있습니다 제안

ALTER TABLE MAIN_TABLE ADD PARTITION DUMMY_PARTITION VALUES LESS THAN (TO_DATE('1-1-9999', 'DD-MM-YYYY')); 

ALTER TABLE MAIN_TABLE 
EXCHANGE PARTITION DUMMY_PARTITION 
WITH TABLE STAGING_TABLE 
WITHOUT VALIDATION UPDATE GLOBAL INDEXES; 

BEGIN 
    FOR row IN (select distinct to_char(DATE_FIELD+1, 'YYYYMMDD') DATE_FIELD from PARTITIONED_TABLE order by DATE_FIELD) 
    LOOP 
     EXECUTE IMMEDIATE 'ALTER TABLE MAIN_TABLE SPLIT PARTITION DUMMY_PARTITION AT (TO_DATE('''||row.DATE_FIELD||''', ''YYYYMMDD'')) INTO (PARTITION p'||row.DATE_FIELD||', PARTITION DUMMY_PARTITION) UPDATE GLOBAL INDEXES'; 
    END LOOP; 
END; 
/

옵션 2 파티션 교환을 수행이 다음 루프에서 큰 파티션을 분할

INSERT /*+ append */ INTO MAIN_TABLE SELECT * FROM STAGING_TABLE; 

어쨌든, 파티션 분할은 삽입 작업보다 느린 프로세스입니다. 예상되는 동작입니까, 아니면 뭔가 빠졌습니까?

+0

스테이징 테이블을 사용해야합니까? 주 파티션 테이블에 직접 삽입 할 수 없습니까? –

답변

0

상황에 따라 빠른 분할 최적화가 있습니다. 그러나 당신의 설명에서 나는 단순히 INSERT/+ * APPEND */ 을 할 것이다. 리소스가 있고 삽입 속도를 높이려는 경우에는 병렬 처리를 사용하는 것이 좋습니다.