Direct path write

EXEM Knowledge Base

Jump to: navigation, 찾기

목차

[편집] Basic Info

direct path write 대기이벤트는 세션 PGA 내부의 버퍼로부터 데이터파일로 기록할 때 발생된다. 세션은 다수의 direct write를 요청한 후 처리를 진행한다. 세션이 I/O 처리가 완료되었다고 인지하는 시점에 direct path write 대기이벤트를 대기한다.

direct path write 대기는 Direct load 작업(CTAS: Create Table As Select, insert /*+ append */ ... 등)이 발생함을 의미한다. 이러한 작업이 요청될 경우 오라클은 SGA를 경유하지 않고 데이터 파일에 직접 쓰기 작업을 수행한다. 즉, DBWR에 의해 쓰기 작업이 이루어지는 것이 아니라 서버 프로세스에 의해 직접 쓰기작업이 이루어진다. CTAS(Create Table As Select)나 Insert /*+ append */, Direct 모드로 SQL*Loader를 수행할때 direct load 작업이 수행된다. 이들 작업들은 다음과 같은 특징을 지닌다.

  • SGA를 거치지 않고, 데이터파일에 직접 쓰기를 수행한다
  • HWM 이후에 블록을 추가(Append)한다. 즉, 프리리스트(FLM)나 비트맵 블록(ASSM)에서 관리하는 프리 블록들을 사용하지 않는다.
  • 추가된 데이터에 대해 언두를 생성하지 않는다.(단 CTAS의 경우 딕셔너리 변경에 대한 언두는 생성된다.)
  • 테이블에 Nologging 옵션이 주어진 경우에는 리두(Redo)가 생성되지 않는다.
  • 테이블에 대해 TM 락을 Exclusive하게 획득하기 때문에 다른 세션에서의 DML이 허용되지 않는다.

Direct load 작업을 적절히 사용하면 대용량의 데이터를 빠른 속도로 생성할 수 있다. Direct 모드와 Parallel 모드를 병행해서 수행함으로써 성능을 더욱 극대화할 수 있다. PCTAS(Parallel CTAS), Insert /*+ paralle append */ 나 direct parallel 모드로 SQL*Loader를 수행하는 것이 대표적인 예이다. Parallel 모드로 데이터가 생성되는 경우 오라클은 다음과 같은 방식으로 사용한다.

  • 각 슬레이브 세션들은 테이블이 속한 테이블스페이스내에 임시 세그먼트(Temporary Segment)를 만들어 데이터를 생성한다. 임시 테이블스페이스가 아님에도 불구하고 임시 세그먼트가 생성된다는 점에 유의하자. 이 경우 DBA_SEGMENTS.SEGMENT_TYPE 컬럼값이 “TEMPORARY”값을 지닌다.
  • 각 슬레이브 세션들이 만든 임시 세그먼트들은 수행이 종료되면 하나의 임시 세그먼트로 병합된다.
  • 커밋(Commit)이 수행되면, 임시 세그먼트는 테이블 세그먼트로 병합되고, HWM이 이동된다.
  • 롤백(Rollback)이 수행되면, 임시 세그먼트는 Drop된다.

Direct 모드인 경우에는 데이터가 직접 테이블 세그먼트로 기록되지만, Parallel 모드와 병행되는 경우에는 일단 테이블 세그먼트가 속한 영구 테이블스페이스(Permanent Tablespace)내의 임시 세그먼트(Temporary Segment)에 직접 기록한 다음 모든 작업이 성공적으로 끝난 후에 테이블 세그먼트에 병합된다는 것에 유의하자. Direct load 작업 수행시 발생하는 direct path write 대기는 필연적인 것으로 이 대기의 발생 자체를 줄일 수는 없다. 만일 direct path write 이벤트의 평균대기시간이 지나치게 높게 나온다면 파일시스템 자체의 성능에 문제가 있다고 판단할 수 있다.

비동기식 I/O가 사용될 경우, direct path write 대기이벤트의 대기횟수와 대기시간은 오해의 소지가 있을 수 있다. 캐쉬 되지 않은 LOB 세그먼트에, 쓰기I/O 작업 시 발생되는 direct path write 대기이벤트는 오라클 8.1.7부터는 direct path write(lob) 대기이벤트로 별도로 구분된다.

[편집] Parameter & Wait Time

[편집] Wait Parameters

direct path write 대기이벤트의 대기파라미터는 다음과 같다.

  • P1 : Absolute File#
  • P2 : Starting Block#
  • P3 : 블록수

[편집] Wait Time

I/O관련 이벤트이므로 타임아웃이 발생하지 않으며, I/O 가 완료될 때까지 소요된 시간을 나타낸다.

[편집] Check Point & Solution

[편집] Event Tip

[편집] Analysis Case