gc cr_current multi block request (by jongmali)[2011.03.26]
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 버퍼 크기를 사용하고, 필요하다면 수 메가 바이트 정도의 크기를 사용하는 것도 고려.