[Oracle] 오라클 Direct Path I/O, Direct Path Insert
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하는 방법은 없음