gc cr/current multi block request

  • 로컬 캐시에 존재하지 않는 여러 개의 데이터 블록을 동시에 읽고자 하는 프로세스는, 해당 데이터 블록들을 관리하는
    마스터 노드에게 블록 전송을 요청하고, 응답을 받을 때까지 gc cr/current multi block request 이벤트를 대기.
  • p1 : file#, p2 : block#, p3 : class#
  • db file scattered read 이벤트와 유사한 속성.
  • FTS(Full Table Scan)과 같은 멀티 블록 I/O를 수행하고자 하는 서버 프로세스는 마스터 노드에게 DB_FILE_MULTIBLOCK_READ_COUNT
    파라미터 값만큼 블록 전송 요청을 수행하며, 블록을 전송 받거나 읽을 권한을 부여 받는다.
    (p.122 예시 참조)
  • gc cr multi block request
    • CR 모드의 멀티 블록 I/O에 의해 발생.
    • CR 모드의 멀티 블록 I/O는 읽기 목적, 즉 SELECT에 의한 FTS나 IFFS등에서 발생.
  • gc current multi block request
    • Current 모드의 멀티 블록 I/O에 의해 발생.
    • FTS를 통한 Update나 Delete 작업, Insert 작업을 위해 새로운 데이터 블록을 읽어오는 경우.(p.123, 124 예시 참조)
    • {color:#FF0000}CR 모드의 멀티 블록 I/O는 DB_FILE_MULTIBLOCK_READ_COUNT 파라미터로 한 번에 처리되는 블록 수를 제어할 수 있지만,
      Insert 작업에 의한 Current 모드의 멀티 블록 I/O는 파라미터의 값과 무관하게 항상 16 블록 단위로 작업이 이루어 진다.{color}

gc cr multi block request 이벤트와 요청 블록의 수

  • 지나치게 많은 블록을 동시에 요청하면 요청과 응답 메시지의 크기가 커져서 작업이 지현되는 현상이 발생할 수 있다.
  • 특히 gc cr multi block request 이벤트의 타임아웃회수가 높게 나온다면 현재 내트워크 설정으로는 많은 수의 블록 요청을 동시에 처리할 수 없다는 것을 암시.
  • DB_FILE_MULTIBLOCK_READ_COUNT 파라미터의 값을 낮추는 것을 고려할 필요가 있다.(8 or 4)

gc cr multi block request 이벤트와 네트워크 설정

  • MTU 크기를 크게 하면 하나의 패킷에 많은 양의 메시지를 담을 수 있기 때문에 멀티 블록 I/O 요청에 더 유리.
  • 대량의 멀티 블록 I/O 요청을 효율적으로 처리하기 위해서는 큰 크기의 UDP Receive 버퍼가 필수적.
  • 오라클은 기본적으로 OS에서 설정한 버퍼 크기를 사용하며, 최소값으로 128K 바이트를 사용.
  • 가능한 256K 바이트 이상의 UDP 버퍼 크기를 사용하고, 필요하다면 수 메가 바이트 정도의 크기를 사용하는 것도 고려.

문서에 대하여

  • 최초작성자 : 김종원
  • 최초작성일 : 2011년 03월 25일
  • 이 문서는 오라클클럽 코어 오라클 데이터베이스 스터디 모임에서 작성하였습니다.
  • {*}이 문서의 내용은 (주)엑셈에서 출간한 'RAC Advanced OWI, Internals and Performance in Oracle 10g'를 참고하였습니다.*