데이터베이스

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 사용 시 복구가 어렵다는 점을 고려해야 합니다.

zerg96

Recent Posts

노트북(윈도우)에서 아이폰 유선 테더링 하기

윈도우 운영체제의 노트북에서는 iPhone 유선 테더링이 잘 안되는 경우가 많습니다. 보통 iPhone의 드라이버가 설치가 안되있어서인…

4일 ago

오라클 래치(Latch)

오라클 데이터베이스의 성능을 논할 때, 내부적으로 발생하는 경합(Contention)은 피할 수 없는 주제다. 특히 다수의 프로세스가…

1주 ago

사장님도 3표, 나도 3표? ‘3%룰’ 완전 정복!

안녕하세요, 혹시 이런 생각해 본 적 없으신가요? "내가 투자한 회사는 누가 감시하고, 어떻게 운영될까?" 오늘은…

3주 ago

Vector Store(벡터 스토어)

'벡터 스토어' 완벽 가이드: AI 시대, 데이터의 새로운 심장을 만나다 IT 업계는 인공지능(AI)이라는 거대한 패러다임의…

3주 ago

Gemini CLI (재미나이 CLI)

1. Gemini CLI란 무엇인가요? Gemini CLI는 터미널 환경에서 직접 Gemini 모델과 상호작용할 수 있도록 만들어진…

3주 ago

과적합 (overfitting)

과적합은 머신러닝에서 학습용데이터를 과하게 학습하여, 실제데이터를 예측하지 못하는 현상을 말합니다. 인공지능(AI)의 학습 방법은 우리가 시험공부를…

1개월 ago