DIRECT PATH INSERT (Oracle)

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의 동작 방식

  1. APPEND 힌트 적용 시 데이터 저장 과정
    • 기존 블록을 재사용하지 않고 새로운 블록을 할당하여 데이터를 저장
    • Multi-block I/O를 사용하여 한 번에 많은 데이터를 삽입
    • Redo/Undo 기록을 최소화하여 성능 향상
  2. Rollback이 불가능한 이유
    • Direct Path Insert는 데이터를 UNDO(롤백 세그먼트)에 저장하지 않고 바로 테이블 블록에 기록
    • 따라서 ROLLBACK을 수행해도 데이터가 삭제되지 않음
    • 실수로 삽입한 경우, DELETE 또는 TRUNCATE를 수행해야 함

4. 성능 비교 (Direct Path vs Conventional Path)

항목Direct Path InsertConventional Insert
데이터 저장 방식새로운 블록을 직접 사용기존 블록을 찾아 삽입
Redo LogNOLOGGING 사용 시 최소화항상 생성됨
Undo 사용최소화됨일반적인 DML 수준
성능빠름 (대량 데이터 삽입 시 유리)느림 (기존 블록을 검색해야 함)
Rollback불가능가능
인덱스 유지무효화 가능유지됨

5. Direct Path Insert의 주의점

  1. Rollback 불가능
    • APPEND 힌트를 사용하면 ROLLBACK이 불가능
    • 실수로 INSERT 한 경우, DELETE 또는 TRUNCATE 수행 필요
  2. Index 무효화 가능
    • APPEND를 사용하면 인덱스가 무효화될 수 있음
    • ALTER INDEX REBUILD 명령을 실행하여 인덱스를 재구성해야 함
    sql복사편집ALTER INDEX index_name REBUILD;
  3. 병렬 처리 시 테이블 잠금 발생
    • PARALLEL과 함께 사용하면 EXCLUSIVE MODE(배타적 잠금) 적용
    • 다른 트랜잭션에서 해당 테이블에 UPDATE 또는 DELETE 불가능
  4. 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는 대량 데이터 적재 시 매우 유용하며, APPENDNOLOGGING을 활용하면 성능을 극대화할 수 있습니다.
❗ 하지만 ROLLBACK이 불가능하고, 인덱스가 무효화될 수 있으며, NOLOGGING 사용 시 복구가 어렵다는 점을 고려해야 합니다.

Leave a Comment