캐시 모두 데이터를 적재해두면 속도도 빠르고 좋으나, 메모리에 한계가 있기 때문에 항상 적재하고 있을수는 없다. 그래서 캐시에서 찾지 못한 경우 I/O 콜을 사용하여 블록씩 데이터를 읽어들이는데 한번에 한 블록씩 가지고 오는 것을 Single Block I/O라고 한다. 그리고 여러 블록을 한번에 가지고 오는 것을 Multi Block I/O라고 한다.



기본적인 인덱스와 테이블 블록을 읽어들일때는 Single Block I/O 방식이 사용된다. 하지만 대량의 데이터를 테이블에서 가지고와야 할 때는 Multiblock I/O가 좋고 그 단위가 크면 대량의 블록에서 데이터를 한번에 가지고 올 수 있기에 프로세스가 잠자는 횟수를 줄일 수 있어 좋다.

그렇기 때문에 대용량 데이터를 Full Scan할때 Multiblock I/O 단위를 크게 설정하면 좋다.


오라클에서는 한번에 옮길 수있는 multiblock에 대해서 db_file_multiblock_read_count 파라미터로 정한다.


만약 OS에서 정한 레벨 I/O 단위가 1MB라고 하였을 때, db_file_multiblock_read_count 값이 128일 경우에 오라클의 레벨 I/O가 8KB이기 때문에 최대로 옮길 수 있다. (8Kb * 128 = 1MB)


그래서 대부분 O/S에 따라서 결정되는데 4 ~ 32 정도로 많이 사용한다. 하지만 이 설정은 Full Scan 시 인접 데이터까지 가지고 올 수 있기에 속도가 빠르나 데이터를 읽어들이는 속도가 증가하고 한정된 Buffer Pool을 많이 차지하게 되어 자주 쓰는 데이터를 버퍼에서 밀어버리기 때문에 효율을 감소시킬수 있기때문에 업무에 맞게 조정하여 사용하여야 한다.

+ Recent posts