|
原帖由 棉花糖ONE 于 2008-6-16 20:03 发表 ![]()
我觉得那个老外说的是对的,我想了下如果像你说的那样,那么效率会比较低,如果读到行的时候这个行上的lock byte是空的话,那么说明这个块是干净的块,这时候根本是不利用undo去构造一致读的块
几年没研究过这些东西了,回过来又想一想
你可以做很简单一个实验:
用几个session分别在block上更新一个行,不提交
然后用另一个session去读这个block上没有被更新 的行,看看cr 是否跟干净的block上完全一样。
当然这个实验是正在执行的 dml,回过来我们想所有 dml都已经提交的情况
我们来做一个假定看看,假定 从 itl的角度来看,所有 itl 的 commit scn都满足查询的需求,那么实际上不需要去undo中获得信息来构造 cr block。 如果 itl中 commit scn不满足查询的需求并且block已经 cleanout过了,当你读到一行数据且 lock byte为0 , 你如何决定这行数据是不是你所要的,是否还是得去根据 itl 一直 roll 到所有 itl 满足你的查询的需求为止。 只要有一个 itl commit scn不满足,你就不能断定 lock byte为0的行的数据是不是你所需要的。
[ 本帖最后由 biti_rainy 于 2008-6-17 19:59 编辑 ] |
|