데이터베이스

DIRECT PATH I/O (Oracle Direct Path I/O)

1. 개요

Direct Path I/O는 Oracle이 데이터를 디스크에서 읽거나 디스크에 쓸 때, 버퍼 캐시(Buffer Cache)를 거치지 않고 직접 데이터 파일에 접근하는 방식입니다. 주로 대용량 데이터 로드, Direct Path Insert, 병렬 처리에서 사용되며, 기존 I/O보다 성능이 뛰어납니다.

Direct Path I/O 주요 특징

  • 버퍼 캐시를 거치지 않고 직접 디스크에 데이터 저장
  • Redo/Undo 사용 최소화 가능
  • 병렬 처리와 결합 가능
  • 주로 Direct Path Load (INSERT /*+ APPEND */ 등)에서 사용됨
  • ASM(Automatic Storage Management) 및 Exadata와 같은 환경에서 최적화됨

2. Direct Path I/O vs. Conventional I/O 비교

항목Direct Path I/OConventional (Buffered) I/O
데이터 처리 방식데이터 파일에 직접 쓰기버퍼 캐시(BUFFER CACHE) 사용
속도빠름 (병렬 지원)상대적으로 느림
Redo Log최소화 가능 (NOLOGGING 사용 시)항상 발생
Undo 사용최소화됨일반적인 DML 수준
트랜잭션 ROLLBACKAPPEND 사용 시 불가가능
병렬 처리가능기본적으로 단일 프로세스

3. Direct Path I/O를 사용하는 작업

Direct Path I/O는 다음과 같은 작업에서 주로 사용됩니다.

(1) Direct Path Insert (INSERT /*+ APPEND */)

  • 기존 블록을 수정하지 않고 새로운 블록을 직접 할당하여 데이터 삽입
  • Redo Log를 최소화할 수 있음 (NOLOGGING 사용 시)
  • 병렬 INSERT와 함께 사용 가능
ALTER SESSION ENABLE PARALLEL DML;

INSERT /*+ APPEND PARALLEL(t, 4) */ INTO target_table t
SELECT * FROM source_table;
  • APPEND를 사용하면 버퍼 캐시를 거치지 않고 데이터를 테이블에 저장
  • 병렬 4개의 프로세스를 사용하여 데이터 적재

(2) Direct Path Load (SQL*Loader DIRECT=TRUE)

  • SQL*Loader에서 DIRECT=TRUE 옵션을 사용하면 Direct Path I/O를 수행
  • 대량의 데이터를 로드할 때 Redo/Undo 최소화 가능
sqlldr userid=user/password control=control.ctl direct=true

(3) Parallel Query (SELECT /*+ PARALLEL */)

  • Oracle의 병렬 쿼리 실행 시 Direct Path Read를 사용
  • 데이터를 버퍼 캐시에 로드하지 않고 바로 클라이언트로 전송
SELECT /*+ PARALLEL(emp, 4) */ * FROM emp;

(4) Direct Path Table Scan (Full Table Scan)

  • 대량의 데이터를 조회할 때 Oracle이 자동으로 Direct Path Read를 수행
  • 테이블 크기가 크고, 인덱스가 없을 때 Full Table Scan 발생
  • Direct Path Read 활성화 조건
    • 테이블이 병렬 모드로 설정됨 (ALTER TABLE PARALLEL)
    • SGA(Buffer Cache)를 우회하도록 설정됨 (_serial_direct_read 활성화)
    • Exadata Smart Scan 등 일부 환경에서 자동 적용됨

4. Direct Path I/O 튜닝 방법

(1) NOLOGGING 활성화

  • Redo 로그를 최소화하여 성능 최적화
ALTER TABLE my_table NOLOGGING;
  • NOLOGGING을 사용하면 장애 발생 시 데이터 복구가 불가능하므로 주의

(2) 병렬 처리 활성화

  • 병렬 쿼리 또는 병렬 DML을 사용하여 Direct Path I/O 활용
ALTER SESSION ENABLE PARALLEL DML;
INSERT /*+ APPEND PARALLEL(sales, 8) */ INTO sales
SELECT * FROM sales_backup;

(3) Table-Level Parallelism 적용

ALTER TABLE sales PARALLEL 8;
  • 병렬 테이블 스캔 시 Direct Path Read가 활성화될 확률 증가

(4) Direct Path Read 강제 설정

  • _serial_direct_read 히든 파라미터를 조정하여 Serial Direct Path Read 활성화
ALTER SESSION SET "_serial_direct_read"=true;
  • 주의: Oracle 버전에 따라 기본적으로 Direct Path Read가 활성화될 수도 있음

5. Direct Path I/O의 한계 및 고려사항

  1. SGA(Buffer Cache) 활용 불가
    • Direct Path I/O는 버퍼 캐시를 우회하므로 자주 조회되는 데이터에는 비효율적
    • OLTP 시스템(트랜잭션 위주 시스템)에서는 권장되지 않음
    • DSS(Decision Support System)나 DW(Data Warehouse) 환경에서 유용함
  2. NOLOGGING 사용 시 데이터 복구 불가
    • 장애 발생 시 Redo Log가 없으므로 데이터 복구가 어려움
    • 중요한 데이터는 LOGGING을 유지하거나 백업 필요
  3. **Rollback 불가능 (INSERT /+ APPEND / 사용 시)
    • Direct Path Insert는 UNDO를 최소화하므로 ROLLBACK이 불가능
    • 데이터를 잘못 삽입하면 DELETE 또는 TRUNCATE로 제거해야 함
  4. Index 무효화 가능성
    • Direct Path Insert 수행 시 기존 인덱스가 비활성화될 수 있음
    • ALTER INDEX REBUILD;를 수행하여 인덱스를 다시 활성화해야 함

6. 결론

Direct Path I/O는 대량 데이터 로드, 병렬 쿼리, Direct Path Insert에서 뛰어난 성능을 제공하며, 특히 DSS/DW 환경에서 강력한 성능 최적화를 가능하게 함
❗ 하지만 Rollback이 불가능하고, SGA(Buffer Cache)를 활용할 수 없으며, NOLOGGING 사용 시 복구가 어렵다는 점을 고려해야 함

zerg96

Recent Posts

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

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

5일 ago

Vector Store(벡터 스토어)

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

1주 ago

Gemini CLI (재미나이 CLI)

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

1주 ago

과적합 (overfitting)

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

3주 ago

아이폰 위치 조작(CLI(커멘드라인)에서 하는방법)

CLI를 이용한 아이폰 위치 조작 전체 과정 A. 최초 1회 준비과정 이 단계들은 PC와 아이폰에…

3주 ago

아이폰 위치조작 방법 (무료 위치조작 프로그램 공유)

아이폰에서 위치 조작(위치 스푸핑이, 가짜 GPS 위치 설정)은 보안 정책 때문에 안드로이드보다 훨씬 어렵습니다. 하지만…

3주 ago