C.S/DB

Oracle 파티션 테이블과 파티션 인덱스 (INSERT 튜닝)

칼쵸쵸 2022. 7. 6. 16:47

Oracle Partition UPDATE 튜닝 정리

대용량 데이터를 입력할 때 성능 문제가 발생할 수 있어서 인덱스를 DROP 하고 데이터를 입력 후에 데이터가 모두 입력시킨 다음 인덱스를 재생성해주는 방법을 고려할 수 있다.

그러나 전체 데이터에 대한 인덱스를 재생성하는 비용도 적지 않기 때문에 쉽게 선택 할 수 없다.

만약 테이블이 파티셔닝 되어있고 이에 대해서 로컬 파티션 인덱스가 생성되어 있다면 파티션 단위로 인덱스를 재생성할 수 있기 때문에 데이터 입력을 빠르게 수행할 수 있다.

 

1. 작업 대상 테이블 파티션을 nologging 모드로 전환한다.

ALTER TABLE INFO_TABLE MODIFY PARTITION P_202201 nologging;

 

2. 작업 대상 테이블 파티션과 매칭되는 인덱스 파티션을 Unuseable 상태로 전환한다.

ALTER INDEX INFO_TABLE MODIFY
PARTITION p202201 unusable;

 

3. 가능하다면 Direct Path Insert 방식으로 대량 데이터를 입력한다.

INSERT /*+ append */ INTO INFO_TABLE
SELECT * FROM SOURCE_DATA WHERE TIME BETWEEN '20220101' AND '20220131';

(SOURCE_DATA 테이블은 입력하려는 데이터가 저장되어있는 원천 테이블)

 

4. 인덱스 파티션을 재생성한다.

ALTER INDEX INFO_TABLE_INDEX
REBUILD PARTITION p202201 nologging;

 

5. 작업 파티션을 Logging 모드로 전환한다.

ALTER TABLE INFO_TABLE MODIFY PARTITION p202201 logging;
ALTER INDEX INFO_TABLE_INDEX MODIFY PARTITION p202201 logging;