정의 : Full Table Scan 시에만 영향을 미치는 파라미터. 한번의 I/O 작업으로 읽어들이는 최대 블럭 수. Multi Block I/O 에 관련된 파라미터
값 설정하기
db_block size * db_file_multiblock_read_count <= 오라클의 최대 I/O 크기(64KB)
default value : O/S에 따라서 다름 (Linux redhat itanium : 16) 일반적으로 db_block_buffers와 Processes에 의해서 결정되며 4~32 정도가 많이 사용됨
FULL TABLE SCAN과 DB_FILE_MULTIBLOCK_READ_COUNT FULL TABLE SCAN을 할 때에는 DB_FILE_MULTIBLOCK_READ_COUNT 이 설정된 만큼을 한꺼번에 데이터를 가져옴 ex) DB_FILE_MULTIBLOCK_READ_COUNT=8 이고 db_block_size가 8k라면 8*8=64k 만큼을 한꺼번에 가져옴
extent의 크기가 작을 경우 : multiblock I/O로 데이터를 읽지 않고 single block I/O를 사용해서 읽음 (I/O의 단위 : Block)
extent안의 블록들이 db_file_multiblock_read_count 보다 작게 되면 db file sequential read(single block I/O시에) 라는 event 발생
MBRC크기보다 큰 extent는 multiblock I/O로 읽다가 extent가 끝나는 부분에 MBRC크기 보다 작은 block이 남아있을 경우에는 single block I/O로 읽음
full scan할 때에는 extent의 크기가 MBRC가 설정된 크기보다 작을 경우에는 single block I/O로 읽게 되므로 성능저하가 될 수 있고, MBRC가 설정된 값에 따라서 optimizer가 full scan or index scan 여부 결정
단점 : 이 파라미터가 크게 설정되어 있다면 블록을 읽어올 때, 설정된 값만큼 읽어오므로 buffer pool에서 다른 블록들이 flush될 수 있음
INDEX SCAN과 DB_FILE_MULTIBLOCK_READ_COUNT
Index scan시에는 db_block_size의 설정이 중요
B-tree Index 에서 블록 크기가 8KB(db_block_size=8KB) 라면 2KB 인 경우보다 거의 4배 빨리 데이터를 읽음
Index Block 의 Pctfree가 너무 크고 인덱스의 Entry Size 가 늘어나지 않으며 기존의 인덱스 값에 새로운 레코드가 더 이상 추가되지 않을 경우 : 공간의 낭비가 심하게 되므로 적절한 값으로 조정
index range scan 을 위해 index full scan 이나, fast full index 을 피하는 방법
index full scan , FFIS 를 선택한 이유 : index 의 LEAFCNT(leaf block count)전체를 읽는 cost < branch level (BLEVEL) 의 cost, 또는 CLUFAC(clustering factor) 의 cost
해결 방법
index 의 height 를 줄이기 위해 db_block_size를 늘림
ndex reorganization 수행
임시적인 방법 : FFIS 나 full index scan cost 를 높이기 위해 index cost 를 결정하는 파라미터를 조정 (아래 3개의 파라미터 값을 작게 조정) {tip} fast_full_scan_enabled =false db_file_multiblock_read_count sort_area_size {tip}
System Statistics와 DB_FILE_MULTIBLOCK_READ_COUNT
System Statistics가 없는 상황 : db_file_multiblock_read_count, optimizer_index_cost_adj와 같은 파라미터들이 Index Scan과 Table Scan중 어느 것을 선택할지를 결정하는데 큰 역할 함
System Statistics가 정상적으로 수집된 경우 : DB_FILE_MULTIBLOCK_READ_COUNT 파라미터가 Optimizer의 비용 계산에 고려되지 않음.
mbrc는 Optimizer에 의해 실행 계획이 생성될 때는 무시되지만 실제 Fetch과정에서 db_file_multiblock_read_count 크기만큼 Multi Block I/O함
10g R2 MBRC를 대신하는 parameter
_db_file_optimizer_read_count : System Statistics가 없는 경우에 Optimizer가 비용을 계산하기 위해 사용. System Statistics가 수집된 경우에는 이 값은 무시
_db_file_exec_read_count : 쿼리를 실행하는 과정에서 Multi Block I/O를 수행할 때 한번에 읽을 블록 수를 결정. System Statistics의 수집 여부와 무관하게 사용