오라클 성능 고도화 원리와 해법 I (2012년)
Direct Path I/O 0 0 99,999+

by 구루비스터디 Direct Path [2018.03.20]


Direct Path I/O

  1. Temp 세그먼트 블록들을 읽고 쓸 때
  2. 병렬 쿼리로 Full scan 을 수행할 때
  3. nocache 옵션으로 지정한 LOB 컬럼을 읽을 때
  4. Direct 옵션을 지정한 LOB 컬럼을 읽을 때
  5. Parallel DML 수행할 때
  6. Dierect Patch 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 하는 경우 버퍼캐시에 읽을 관련된 데이터가 있을 수 있으므로(즉 변경된 데이터) Check point가 발생하여 동기화를 먼저 시도한다.
  • (관련 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이 걸린다.
  • 일반적으로 업무시간에 사용하지 않습니다.(초기적재 및 배치 위주로 진행됩니다.)]
  • 이외 Segment 할당 사이즈, Sort area 관련 등 관련된 것들이 있습니다.
코어 오라클 데이터베이스 스터디 모임 에서 2012년에 오라클 성능 고도화 원리와 해법 I 도서를 스터디하면서 정리한 내용 입니다.

- 강좌 URL : http://www.gurubee.net/lecture/3121

- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^

- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입