비파티션 테이블
대량 데이터를 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 |