1. Parallel Query 수행시 슬레이브 세션(Slave Session)이 수행하는 direct path I/O에 의해 발생한다.
2. 슬레이브 세션이 direct path read를 수행하는 동안 코디네이터 세션(Coordinator Session)은 슬레이브 세션으로부터 응답이 오기를 기다리며 PX Deq: Excute Reply 이벤트를 대기하는 것으로 관찰된다.
3. Parallel Query 수행시 발생하는 direct path read 대기는 필연적이다.
4. P1=file#, P2=시작 block, P3=블록수
5. 버퍼 캐시와 관련된 경합이 발생하는 경우 이를 피하기 위한 방법으로 활용가능하다.
1. 정렬작업을 위해 정렬 세그먼트(Sort segment)를 읽고 쓰는 경우. direct path read temp, direct path write temp 이벤트를 대기한다.
2. Parallel Query를 위해 데이터파일을 읽는 경우. direct path read 이벤트를 대기한다.
3. PDML이나 CTAS를 위해 데이터파일을 쓰는 경우. direct path write 이벤트를 대기한다.
4. NOCACHE 속성으로 생성된 LOB 세그먼트를 읽고 쓰는 경우. direct path read(lob), direct path write(lob) 이벤트를 대기한다.
5. I/O 시스템이 데이터를 읽어서 오라클에 반환하는 속도보다 훨씬 빠른 속도로 버퍼를 요구할 때. 이 경우 오라클 성능개선을 위해 readahead I/O(이후에 읽을 것으로 판단되는 데이터를 미리 한꺼번에 읽는 I/O 작업을 말함)를 이용한다. 이 경우 direct path read 이벤트를 대기한다.
1. direct path read 대기는 필연적인 것으로 Parallel Query의 성능을 높인다
2. I/O 시스템의 성능을 높인다.
3. _DB_FILE_DIRECT_IO_COUNT 의 조정
{code} ERROR at line 1: ORA-12801: error signaled in parallel query server P002 ORA-01555: snapshot too old: rollback segment number 68 with name "_SYSSMU68$" too small {code} |
1. 하나의 세션에서 PQ를 수행한 후, PQ가 수행되는 동안 다른 세션에서 V$SESSION_WAIT 뷰를 조회해서 P1 값을 얻으면 어떤 파일에 대한 direct path read 인지 알 수 있다.
{code} set serveroutput on size 100000 declare begin for px in (select * from v$px_session where qcsid = 세션ID ) loop for wait in (select * from v$session_wait where sid = px.sid and event like '%direct path read%') loop dbms_output.put_line('SID=' | wait.sid | ', P1=' | wait.P1); end loop; end loop; end; / |
---|
SQL>exec print_table('select * from v$datafile where file# = :P1값 ');
|
h2. 문서에 대하여
* 최초작성자 : [~kwlee55]
* 최초작성일 : 2011년 01월 06일
* 이 문서는 [오라클클럽|http://www.gurubee.net] [코어 오라클 데이터베이스 스터디|5차 코어 오라클 데이터베이스 스터디] 모임에서 작성하였습니다.
* {color:blue}{*}이 문서의 내용은 (주)엑셈에서 출간한 'PRACTICAL OWI IN ORACLE 10G'와 'Advanced OWI in Oracle 10g'를 참고하였습니다.*{color}