[ORACLE] Direct Path I/O

반응형

1. Direct Patch I/O

  • 일반적인 블록 I/O는 DB 버퍼 캐시를 경유한다. 읽고자 하는 블록을 먼저 버퍼캐시에서 찾아보고, 찾지 못할 때만 디스크에서 읽는다. 데이터 변경도 버퍼캐시에 적재된 블록에서 이루어지며, DBWR 프로세스가 주기적으로 변경된 블록(Dirty Buffer Blcok)을 데이터파일에 기록한다. 
    -> 오라클은 버퍼 캐시를 경유하지 않고 데이터블록을 읽고 쓸 수 있는 Direct I/O 기능을 제공한다.

  1. Temp Segment Block을 읽고 쓸 떄 
  2. 병렬 쿼리로 Full scan을 수행할 때
  3. Nocache 옵션을 지정한 LOB Column을 읽을 때
  4. Direct 옵션을 지정하고 export를 수행할 때
  5. Parleele DML을 수행할 때 
  6. Direct Path Insert를 수행할 때
  7.  /*+ append*/ 힌트
  8. CTAS
1) Direct Patch Read / Write Temp
  • 데이터를 정렬할 때는 PGA메모리에 할당되어있는 Sort Area를 사용합니다. 정렬할 데이터가 많아 Sort Area가 부족해지면 Temp 테이블스페이스를 사용하는데, Direct Path I/O 를 사용한다. Direct path write temp / Direct path read temp 이벤트로 측정된다. 

2) Direct Path Read
  • -. 병렬쿼리로 Full Scan 할 경우 사용가능, 병렬도(DOP)를 2로 주고 병렬쿼리를 수행하면 수행속도가 2배 이상 빨라지는 이유이다. direct path read 이벤트 발생
  • -. 버퍼캐시에 내용이 기록되지 않은 상태에서 병렬로 Direct Path Read를 실행하면 Dirty Read가 생기므로 메모리와 디스크간 동기화를 한다음 실행한다. 10gR2부터는 필요한 세그먼트만 동기화를 하고 실행한다.

 

3) Direct Path Write
  • -. 병렬 DML을 실행하거나, Direct Path Insert 방식으로 insert 할 떄 사용한다. direct path write 이벤트 발생
  • -. Driect Path Insert 방식 
  1. /*+append */ 힌트
  2. 병렬모드로 insert
  3. direct 옵션을 지정하고 SQL*Loader(sqldr)로 데이터 로드
  4. CTAS
  • -. Direct Path Insert 방식으로 Insert하는 알고리즘
    ->테이블 세그먼트의 HWM(high water mark) 바깥 아무도 읽지 않는 영역에 순차적으로 입력하므로 UNDO 발생 최소
  • 기능 활성화 방법
alter table test_table10 nologgin;

 

반응형

'Database > Oracle' 카테고리의 다른 글

[ORACLE] LOCK 구조, 경합 쿼리  (0) 2022.09.21
[ORACLE] Object변경 작업(dependency check, lock)  (0) 2022.08.26
[ORACLE] PAGING 처리  (0) 2022.08.18
[ORACLE] RAC Patch  (0) 2022.06.27
[ORACLE] RAC Recovery  (0) 2022.06.16