IT

[Oracle] 오라클 Direct Path I/O, Direct Path Insert

정미나 2018. 1. 9. 21:37

Direct Path I/O

오라클 DB Buffer Cache를 경유하지 않고 곧바로 데이터 블록을 읽고 쓸 수 있도록 제공되는 기능

* Conventional Path I/O : DB Buffer Cache를 경유하는 일반적인 I/O 작업


Direct Path I/O가 작동하는 경우

① Direct Path Read/Write Temp 

대량의 데이터 정렬 시 PGA의 Sort Area가 부족할 경우 Temp 테이블 스페이스 이용

→ Sort Area에 정렬된 데이터를 Temp 테이블 스페이스에 쓰고 이를 다시 읽을 때 Direct Path I/O 발생

② Direct Path Read

병렬 쿼리로 Full Scan 수행 시 Direct Path Read 발생

→ 병렬도를 2로 주고 병렬쿼리 수행 시 쿼리 수행 속도가 2배 이상 빨라짐

* 단, Buffer Cache에 Dirty Buffer가 존재하는 상태로 Direct Path Read가 이루어지면 정합성에 문제가 생기므로 반드시 메모리와 디스크 간 동기화가 선행되어야 함

③ Direct Path Write

병렬로 DML 수행 시, 또는 Direct Path Insert 방식으로 데이터를 insert 시 Direct Path Write 발생

Freelist를 참조하지 않고 테이블 세그먼트 또는 각 파티션 세그먼트의 HWM 바깥 영역에 데이터를 순차적으로 입력

→ Undo 발생량 최소화


* Direct Path Insert 방식으로 데이터를 입력하는 방법

INSERT /*+append*/ INTO T1 SELECT * FROM T2;

COMMIT;


ALTER SESSION ENABLE PARALLEL DML;

INSERT /*+parallel(T1, 10)*/ INTO T1;

COMMIT;


CREATE TABLE T_COPY AS SELECT * FROM T;


* Redo Log 최소화 (Data Dictionary 변경사항만 로깅)

ALTER TABLE T NOLOGGING;


ALTER SESSION ENABLE PARALLEL DML;

DELETE /*+parallel(B 4)*/ FROM BIG_TABLE B;

-- Exclusive 모드 TM Lock (다른 트랜잭션의 DML 막음)

※ Direct Path Insert가 아닌 일반 insert 문을 nologging하는 방법은 없음