首先我们来温习下db_file_multiblock_read_count参数,该参数我想都比较熟悉了,不多说。

db_file_multiblock_read_count:


关于这个参数,不用多说了,是指oracle多块读所能读取的最大block数(主要针对full scan,例如table full scan,index full scan),理论上有这么一个关系: db_file_multiblock_read_count=(max io szie)/block_size ,当然这里的max io size是受限于操作 系统的,另外据我所知,目前db_file_multiblock_read_count参数,oracle所支持的最大值也就是128. 另外需要说明一点的是,从10gR2开始,该参数已经是自动调节了。


SQL> SELECT * FROM v$version WHERE rownum < 2;

BANNER
--------------------------------------------------------------------------------
Oracle DATABASE 11g Enterprise Edition Release 11.2.0.2.0 - Production

SQL> SHOW parameter multiblock

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
_hash_multiblock_io_count INTEGER 0
_sort_multiblock_read_count INTEGER 2
db_file_multiblock_read_count INTEGER 54


可以看到,我这里11gR2环境中,参数自动调整后为54,是一个比较大的值了。

block_size:

关于block size,是指定义数据库中数据块的大小,9i之前每个数据库只能有一个block size。从9i开始支持一个库中存在多种 block_size的情况。当然,我们这里不是来讨论block_size定义的,我是来说明下,我们如何来选择适合自己系统的block_size? 在oracle 的performance tunning 手册里面,是这样描述的: 针对读操作: 1) 如果rows are small且数据库access方式主要是随机操作,那么推荐使用smaller block size; 2) 如果rows are small且数据库access方式主要是顺序读,那么推荐使用smaller block size; 3) 如果rows are small且数据库access方式主要是随机和顺序操作,那么推荐使用large block size; 4) 如果rows are large,比如包含log 数据,那么推荐使用large block size。