데이터베이스

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

타입스크립트 (TypeScript)

1. 타입스크립트 개요 타입스크립트(TypeScript)는 마이크로소프트(Microsoft)가 개발한 자바스크립트(JavaScript)의 상위 집합(Superset) 언어입니다.즉, 자바스크립트에 정적 타입(Static Type)을 추가하고,…

5개월 ago

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

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

6개월 ago

오라클 래치(Latch)

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

7개월 ago

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

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

7개월 ago

Vector Store(벡터 스토어)

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

7개월 ago

Gemini CLI (재미나이 CLI)

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

7개월 ago