|
wei-xh 发表于 2013-7-19 20:05 ![]()
是的,增高HWM是不可逆的,即使你的会话回退,这个操作也不能回退了。
IMU对修改block的影响
无论是传统上,还是采用了IMU,对block的修改都应该满足两个要求
1,先将record record拷贝到log buffer,然后再修改block
2,在修改block前后要获取和释放buffer pin
传统上对block的修改是one change = one record,因此redo record很快就apply到block上。也就是这个顺序:
加pin
拷贝redo record到log buffer
修改block
释放pin
采用了IMU后,所有change vector都打包成一个redo record,在事务提交时批量写入log buffer。那对block的修改会是怎样的?
想法1:
事务A提交,将redo record都写入log buffer,包括redo record
获取buffer1的pin,修改buffer1,释放pin
获取buffer2的pin,修改buffer2,释放pin
......
获取bufferN的pin,修改bufferN,释放pin
如果在修改buffer1的时候,某个会话读取bufferN,就读取到了事务A开始之前的纪录。这不符要求。
想法2
获取buffer1的pin,buffer2的pin......
事务A提交,将redo record都写入log buffer,包括redo record
修改buffer1,buffer2.....
释放pin1,pin2......
这个会导致对各个buffer pin的持有时间比传统更长,加剧buffer busy wait冲突
除了这两个想法外,还有什么其它想法么? |
|