현재 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;
어쨌든, 파티션 분할은 삽입 작업보다 느린 프로세스입니다. 예상되는 동작입니까, 아니면 뭔가 빠졌습니까?
스테이징 테이블을 사용해야합니까? 주 파티션 테이블에 직접 삽입 할 수 없습니까? –