db_file_multiblock_read_count
 
Oracle在全表或全索引扫描时,一次读取的数据块的数目
 
目前操作系统一般支持512K到1M
 
缺省值一般比较小 (16或32)
还要受Oracle的限制,目前Oracle所支持的最大值为128.
 
增加这个参数可以减小IO调用的次数( 减小CPU开销 )
设置要受OS最大IO能力影响,也就是说,如果你系统的硬件IO能力有限,即使设置db_file_multiblock_read_count也是没有用的。
 
可以用 alter system 或alter session进行修改
 
增加这个值会使用 CBO偏向于使用全表扫描
 
Oracle一次IO能读取多少block还和很多因素有关,比如存储是否连续,磁盘是否经过条带等方式划分,并且Oracle的单次IO读取不能跨越Extent边界等.某些平台还和操作系统的参数设置有关.
 
在9i允许多个不同block大小的表空间上作测试,可以发现不同的表空间FTS时候读取的block数十不一样的,但是字节数总是一样。所以其实db_file_multiblock_read_count 并不是限定了FTS时读取的确切block数,而是限定了读取的字节数。
也就是如果system表空间的block size是8K,db_file_multiblock_read_count =16,那么其实是限定了一次读取8K*16=128K字节。
 
 
show parameter db_file_multiblock_read_count
alter session/sytem set db_file_multiblock_read_count=128;
 
最大db_file_multiblock_read_count和系统IO能力应该有如下关系:
      Max(db_file_multiblock_read_count) = MaxOsIOsize/db_block_size