您的位置:首页 > 数据库 > Oracle

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

2008-10-14 19:57 531 查看
当研究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 可以获得较好的性能提升。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: