IX. read by other session
1) Event 정의
- 다른 Session에 의해 Disk로부터 Loading 중인 Block을 읽는 경우 Loading 작업이 끝나기를 기다리는Event (10g부터 buffer busy waits에서 분리됨)
- P1 = file#
- P2 = block#
- P3 = block class#
2) 대기발생 사유
- 원하는 Block을 Buffer에서 찾지 못한 경우 Buffer Lock을 Exclusive Mode로 획득 후, 해당 Block을 Disk에서 Read
- 따라서 동시 SELECT 상황에서 buffer lock 경합 발생
read by other session 이벤트는 db file sequential read, db file scattered read 이벤트와 같은 I/O 대기현상이 함께 발생한다.
버퍼에 존재하지 않은 블록을 디스크로부터 읽어 버퍼를 생성하는 프로세스는 버퍼 락을 exclusive모드로 획득한다.
해당 블록을 읽기 위해 버퍼 락을 Shared 모드로 획득하려는 다른 세션들은 해당 블록의 디스크 I/O가 끝나 exclusive 모드의 버퍼 락이 해제될 때까지 대기해야 한다.
3) P3 = 1 (Data Block 경합)
- Buffer Cache에 존재하지 않아서 Disk로 읽어 들어야 하는 Block에 대해, 다수의 Session이 동시에 동일 Block을 요청하는 경우
- 이러한 경우 1개의 Session은 Disk I/O를 수행하며, 나머지 Session들은 read by other session Event를 대기함
- SQL문이 SELECT이면 Reason Code 130(9i)과 유사한 것임
read by other session 대기 해소 방법
Physical reads를 줄여 필요한 블록들이 메모리에 상주될 수 있게 해야 하기 때문에 불필요한 I/O을 줄여 물리적 I/O를 최소화 하는 것이 매우 중요하다.
동시성 레벨을 낮추거나 병렬 쓰레드(parallel thread)간의 일량을 분할하는 방식으로 업무를 변경
Logical reads 및 physical reads의 수를 줄이기 위해 SQL문을 최적화
문서에 대하여
- 최초작성자 : 황종필
- 최초작성일 : 2010년 09월 18일
- 이 문서는 오라클클럽 코어 오라클 데이터베이스 스터디 모임에서 작성하였습니다.
- {*}이 문서의 내용은 (주)엑셈에서 출간한 'PRACTICAL OWI IN ORACLE 10G'를 참고하였습니다.*