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문을 최적화

문서에 대하여