Oracle数据库数据恢复、性能优化

找回密码
注册
搜索
热搜: 活动 交友 discuz
发新帖

351

积分

0

好友

8

主题
1#
发表于 2012-5-12 23:05:01 | 查看: 3032| 回复: 0
先介绍基本概念:
当clustering factor 很高时,说明index entry(rowid) 是随机指向一些block的,在一个大的indexrange scan时,这样为了读取这些rowid 指向的block,就需要一次有一次重复的去读这些block。
当clustering factor 值低时,说明index keys(rowid) 是指向的记录是存储在相同的block里,这样去读row时,只需要在同一个block里读取就可以了。就可以减少重复读取block的次数。

再看tom对此的描述:
所以数据库说:“如果通过索引 COLOCATED_PK 从头到尾地读取 COLOCATED 表中的每一行,就
要执行 11.190 次 I/O。不过,如果我们对 DISORGANIZED 表做同样的事情,则会对这个表执行 99,932
次 I/O。“之所以存在这么大的区别,原因在于,当 Oracle 对索引结构执行区间扫描时,如果它发现索引
中的下一行于前一行在同一个数据库块上,就不会再执行另一个 I/O 从缓冲区缓存中获得表块。它已经有
表块的一个句柄,只需直接使用就可以了。不过,如果下一行不在同一个块上,就会释放当前的这个块,
而执行另一个  I/O  从缓冲区缓存获取要处理的下一个块。因此,在我们对索引执行区间扫描时,
COLOCATED_PK 索引会发现下一行几乎总于前一行在同一个块上。DISORGANIZED_PK 索引发现的情况
则恰好相反。

但是今天在群里跟刘大沟通发现cache buffer handle(也就是这里提到的句柄)不是这样用的,那clustering factor是通过什么原理来影响consistent gets的呢?为什么“索引
中的下一行于前一行在同一个数据库块上,就不会再执行另一个 I/O 从缓冲区缓存中获得表块”?
您需要登录后才可以回帖 登录 | 注册

QQ|手机版|Archiver|Oracle数据库数据恢复、性能优化

GMT+8, 2024-11-15 15:54 , Processed in 0.045455 second(s), 21 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部
TEL/電話+86 13764045638
Email service@parnassusdata.com
QQ 47079569