1. 개요
Direct Path Insert는 Oracle에서 데이터를 삽입할 때 기존 테이블의 블록을 재사용하지 않고, 새로운 데이터 블록을 직접 할당하여 삽입하는 방식입니다. 일반적인 INSERT
는 기존 블록에 데이터를 추가하지만, Direct Path Insert는 새로운 블록을 예약하여 데이터베이스에 바로 기록합니다.
🔹 Direct Path Insert 주요 특징
- 기존 블록을 재사용하지 않음 (새로운 블록에 직접 기록)
- UNDO(롤백 세그먼트) 사용 최소화
- REDO(로그 기록) 최소화 가능 (
NOLOGGING
옵션 사용 시) - 병렬 처리가 가능 (
PARALLEL
힌트 사용 시) - INSERT 후 ROLLBACK이 불가능 (APPEND 모드 사용 시)
2. Direct Path Insert 문법
(1) 기본 문법
INSERT /*+ APPEND */ INTO 테이블명
SELECT 컬럼명 FROM 다른_테이블;
APPEND
힌트를 사용하면 Direct Path 방식으로 INSERT 수행- 새로운 블록을 생성하여 데이터를 저장
- 기존 블록을 수정하지 않으므로 성능이 향상됨
(2) 병렬 처리와 함께 사용
ALTER SESSION ENABLE PARALLEL DML;
INSERT /*+ APPEND PARALLEL(t, 4) */ INTO target_table t
SELECT * FROM source_table;
PARALLEL(t, 4)
: 4개의 병렬 프로세스를 사용하여 삽입ENABLE PARALLEL DML
을 설정해야 병렬 INSERT 가능
(3) NOLOGGING 옵션 추가 (Redo Log 최소화)
ALTER SESSION ENABLE PARALLEL DML;
INSERT /*+ APPEND PARALLEL(emp, 4) */ INTO emp NOLOGGING
SELECT * FROM emp_backup;
NOLOGGING
을 사용하면 Redo Log를 최소화하여 성능 향상- 주의: NOLOGGING 사용 시 장애 발생 시 복구 불가능
3. Direct Path Insert의 동작 방식
- APPEND 힌트 적용 시 데이터 저장 과정
- 기존 블록을 재사용하지 않고 새로운 블록을 할당하여 데이터를 저장
- Multi-block I/O를 사용하여 한 번에 많은 데이터를 삽입
- Redo/Undo 기록을 최소화하여 성능 향상
- Rollback이 불가능한 이유
- Direct Path Insert는 데이터를 UNDO(롤백 세그먼트)에 저장하지 않고 바로 테이블 블록에 기록
- 따라서 ROLLBACK을 수행해도 데이터가 삭제되지 않음
- 실수로 삽입한 경우,
DELETE
또는TRUNCATE
를 수행해야 함
4. 성능 비교 (Direct Path vs Conventional Path)
항목 | Direct Path Insert | Conventional Insert |
---|---|---|
데이터 저장 방식 | 새로운 블록을 직접 사용 | 기존 블록을 찾아 삽입 |
Redo Log | NOLOGGING 사용 시 최소화 | 항상 생성됨 |
Undo 사용 | 최소화됨 | 일반적인 DML 수준 |
성능 | 빠름 (대량 데이터 삽입 시 유리) | 느림 (기존 블록을 검색해야 함) |
Rollback | 불가능 | 가능 |
인덱스 유지 | 무효화 가능 | 유지됨 |
5. Direct Path Insert의 주의점
- Rollback 불가능
APPEND
힌트를 사용하면 ROLLBACK이 불가능- 실수로 INSERT 한 경우,
DELETE
또는TRUNCATE
수행 필요
- Index 무효화 가능
APPEND
를 사용하면 인덱스가 무효화될 수 있음ALTER INDEX REBUILD
명령을 실행하여 인덱스를 재구성해야 함
ALTER INDEX index_name REBUILD;
- 병렬 처리 시 테이블 잠금 발생
PARALLEL
과 함께 사용하면 EXCLUSIVE MODE(배타적 잠금) 적용- 다른 트랜잭션에서 해당 테이블에
UPDATE
또는DELETE
불가능
- NOLOGGING 사용 시 복구 불가
- 장애 발생 시,
NOLOGGING
으로 삽입한 데이터는 복구할 수 없음 - 중요한 데이터는 백업 후 NOLOGGING 사용을 고려해야 함
- 장애 발생 시,
6. Direct Path Insert 활용 사례
(1) 대량 데이터 적재 (ETL 작업)
- 기존 테이블에 데이터가 많을 경우, Direct Path Insert를 사용하여 적재 속도 향상
NOLOGGING
옵션을 활용하여 Redo Log 최소화
(2) 데이터 마이그레이션
- 한 테이블에서 다른 테이블로 대량의 데이터를 이동할 때 유용
- 기존 데이터를 유지하면서 새로운 블록에 저장 가능
(3) 실시간 데이터 적재
- 실시간으로 많은 데이터를 적재할 때 성능 최적화 가능
- 병렬 처리를 활용하여 다중 프로세스로 빠르게 삽입 가능
7. Direct Path Insert 비활성화 방법
기본적으로 INSERT
는 Conventional Path를 사용하므로, Direct Path Insert를 방지하려면 APPEND
힌트를 제거하면 됩니다.
INSERT INTO table_name
SELECT * FROM source_table;
또는 NOLOGGING 대신 LOGGING 활성화
ALTER TABLE table_name LOGGING;
8. 결론
✅ Direct Path Insert는 대량 데이터 적재 시 매우 유용하며, APPEND
와 NOLOGGING
을 활용하면 성능을 극대화할 수 있습니다.
❗ 하지만 ROLLBACK이 불가능하고, 인덱스가 무효화될 수 있으며, NOLOGGING 사용 시 복구가 어렵다는 점을 고려해야 합니다.