IT 기술/DB 개념

파티션을 활용한 대량 INSERT 튜닝

keun90 2025. 4. 15. 00:10

비파티션 테이블

대량 데이터를 INSERT 하려면, 인덱스를 Unusable 시켰다가 재생성하는 방식이 더 빠를 수 있다.

1. nologging 모드 변환

alter table t1 nologging;

 

2. 인덱스 unusable 상태 변경

alter index t1_x01 unusable;

 

3. (할 수 있다면 direct path insert) 방식으로 대량 데이터를 입력한다. 

insert /*+ append */ into t1
select * from s1;

 

4. (할 수 있다면 nologging 모드로) 인덱스를 재생성한다.

alter index t1_x01 rebuild nologging;

 

5. logging 모드로 전환한다. 

alter table t1 logging;
alter index t1_x01 logging;

 

파티션 테이블 

초대용량 인덱스를 재성성하는 부담이 만만치 않기 때문에 시간이 더 올래 걸리더라도 실무에서 웬만하면 인덱스를 그대로 둔 상태로 작업한다. 하지만, 파티셔닝이 되어 있고, 인덱스토 로컬 파티션이라면, 파티션 단위로 인덱스를 재생성할 수 있다. 

 

1. (할 수 있다면) 작업 대상 테이블 파티션을 nologging 모드로 전환한다. 

alter table t1 modify partition p_202504 nologging;

 

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

alter index t1_x01 modify partition p_202504 unusable;

 

3. (할 수 있다면 direct path insert 방식으로) 대량 데이터를 입력한다. 

insert /* append */ into t1
select * from s1 where dt between '202501' and '20251231'

 

4. (할 수 있다면 nologging 모드로) 인덱스 파티션을 재생성한다.

alter index t1_x01 rebuild partition p_202504 nologgin;

 

5. logging 모드로 전환한다. 

alter table t1 modify partition p202504 logging;
alter index t1_x01 modify partition p202504 logging;

 

'IT 기술 > DB 개념' 카테고리의 다른 글

동시성 제어 없는 낙관적 프로그래밍  (0) 2025.05.03
Lock  (0) 2025.04.16
파티션을 활용한 대량 DELETE 튜닝  (0) 2025.04.14
파티션, 대량 UPDATE 튜닝  (0) 2025.04.07
파티션을 활용한 DML 튜닝  (0) 2025.04.03