데이터베이스

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

SQLD 핵심 개념, NULL·JOIN·윈도우 함수 8문제로 정리

SQLD에서 점수를 가르는 건 어려운 이론보다 NULL 처리, 조인 조건 위치, 윈도우 함수의 동작 같은…

3시간 ago

AI 때문에 디자이너 일자리 절반이 사라진다 — 지금 당장 바꿔야 할 것들

AI 이미지 생성 도구의 폭발적 보급으로 그래픽·콘텐츠 디자이너 일감이 실제로 줄고 있습니다. 어떤 직군이 먼저…

5시간 ago

전기차 소프트웨어 전쟁, 현대차가 테슬라를 이길 수 있을까

전기차 시장이 배터리 싸움에서 소프트웨어 전쟁으로 전환됐다. 테슬라의 AI·데이터 해자 vs 현대차의 SDV 전략, 진짜…

10시간 ago

미국 9월 생산자물가 1.3% 급등, 그런데 뉴욕증시는 올랐다: 10월 16일 간밤 시황

어제 미국에서 9월 생산자물가지수(PPI)가 나왔는데 숫자가 꽤 거칠었습니다. 그런데 간밤 뉴욕증시 3대 지수는 모두 올랐습니다.…

10시간 ago

9월 가계대출 9개월 만에 2.2조 감소, 신용대출 3조가 줄고 주담대는 3.3조 늘었다

가계대출이 오랜만에 줄었다는 소식에 대출 문턱이 낮아지는 거냐고 묻는 분들이 많습니다. 금융당국이 10월 15일 발표한…

11시간 ago

뉴욕은 올랐는데 코스피는 7.57% 폭락 마감, 오늘(16일) 개장 전 체크할 4가지

어제 코스피가 하루에 7% 넘게 빠졌다는 소식, 아침에 확인하고 놀라신 분들 많으실 텐데요. 그런데 밤사이…

11시간 ago