05.Direct Path I/O


Contents

Direct Path I/O 란?

개별 프로세스 입장에서 대용량 데이터를 읽고 쓸 때 버퍼 캐시 를 경유하지 않고 곧바로 데이터 블록을 읽고 쓸 수 있는 기능.

  • Temp 세그먼트 블록들을 읽고 쓸 때
  • 병렬 쿼리로 Full scan을 수행할 때
  • nocache 옵션을 지정한 LOB 컬럼을 읽을 때
  • direct 옵션을 지정하고 export를 수행할 때
  • parallel DML을 수행할 때
  • Direct Path Insert를 수행할 때

Direct Path Read/Wirte Temp

데이터를 정렬할 때 PGA 에 할당되는 Sort Area 를 이용하는데
정렬할 데이터가 부족하면 TEMP 을 이용한다. 이 경우 Direct I/O 을 사용한다.

(관련 Wait : direct path write temp , direct path read temp )

Direct Path Read

병렬쿼리로 Full Scan 하는 경우 Direct Path 사용.(Direct Path Read 병렬쿼리를 실행하면 병렬 이상의 수행속도가 나옴)

  • Direct Path Read 하는 경우 버퍼캐시에 읽을 관련된 데이터가 있을 수 있으므로
    (즉 변경된 데이터) Check point가 발생하여 동기화를 먼저 시도한다.
  • 예전에는 병렬 쿼리 수행 시 체크포인트를 통해 버퍼 캐시 전체를 데이터파일에 기록했지
    만 10gR2부터 는 병렬 쿼리와 관련된 세그먼트만 동기화를 수행한다.
    (관련 Wiat : Direct Path Read)

Direct Path Write

병렬로 DML 을 수행하거나 Direct path Insert 방식으로 데이터를 insert 하는 경우
발생한다 . (관련 Wait : Direct Path Write )

  • insert .. select 문장에 /*\+ append \*/ 힌트 사용
  • 병렬 모드로 insert
  • Direct 옵션을 지정하고 SQL*Loader(sqlldr)로 데이터 로드
  • CATS (Create table .. as select ) 문장을 사용.

Conventional insert

  Freelist를 통해 데이터를 삽입할 블록을 할당.
  Freelist를 조회하면서 Random 액세스 방식으로 버퍼 캐시에서 해당 블록을 찾고,
  없으면 데이터파일에서 읽어 캐시에 적재한 후에 데이터를 삽입하므로
  대량의 데이터를 insert 할 때 매우 느리다.

Direct Path Insert

  Freelist를 참조하지 않고 테이블 세그먼트 또는 각 파티션 세그먼트의 HWM 바깥
  영역에 데이터를 순차적으로 입력한다
  Direct Path Insert에서는 Redo와 Undo 엔트리를 로깅하지 않도록 옵션을
  줄 수도 있어 훨씬 빠르다.

  • Redo 엔트리를 기록 하지 않는다는것은 리커버리 단계시 롤포워드 복구가 불가능.
  • Exclusive 모드 테이블 Lock이 걸린다. (해당 테이블 다른 트랜젝션 DML 불가)

Direct Path I/O http://cafe.naver.com/ocmkorea/book2025209/10180