Oracle 10R2 研究db_file_multiblock_read_count对成本的影响

    当研究oracle的查找方式中发现,在全表扫描和索引扫描时,会用到db_file_multiblock_read_count来一次读取多个IO。也看了一些关于db_file_multiblock_read_count的文章,为加深自己的理解,特做个试验研究。

 以下是reference对它的解释:
   参数类型: Integer
   默认值: 这个值对应最大的I/O大小,但是它是平台依赖的。
   修改方法:ALTER SESSION, ALTER SYSTEM
   值范围:依赖于操作系统
   这个参数的意思是,在Table scan中,一次连续读(sequential read)能获取的最大块数。当然这个值,不能超过操作系统和硬件的I/O极限。如果超过了,Oracle则会使用实际最大值。一般在OLTP系统中,这个值是4~16

     执行语句: 

select count(DISTINCT AMOR_VAL) from COST_LEDG_H

    列AMOR_VAL没有建立任何索引,同时COST_LEDG_H有大约3百万行数据。

   执行:

alter session set db_file_multiblock_read_count=4

  统计结果:

| Id  | Operation          | Name        | Rows  | Bytes | Cost (%CPU)| Time
--------------------------------------------------------------------------------
|   0 | SELECT STATEMENT   |             |     1 |     2 |  5352   (4)| 00:01:05

    
13784  consistent gets
  执行:
alter session set db_file_multiblock_read_count=8;

  统计结果:

| Id  | Operation          | Name        | Rows  | Bytes | Cost (%CPU)| Time
--------------------------------------------------------------------------------
|   0 | SELECT STATEMENT   |             |     1 |     2 |  3914   (5)| 00:00:47

 
13784  consistent gets

  执行

alter session set db_file_multiblock_read_count=16;

  统计结果:

| Id  | Operation          | Name        | Rows  | Bytes | Cost (%CPU)| Time
|   0 | SELECT STATEMENT   |             |     1 |     2 |  3194   (6)| 00:00:39
 
 
13784  consistent gets

   通过以上的例子发现,我们将 db_file_multiblock_read_count 改成4,8,16后,虽然查询的IO次数没变,但查询的时间从65s,47s,39s的减少,

效果显著,同时Cost也限制减少。

   总结:较大的db_file_multiblock_read_count 可以获得较好的性能提升。

原文地址:https://www.cnblogs.com/zping/p/1311128.html