|
我们可以重新梳理一下update流程:
1)首先获取一对私有的memory pool:private redo pool,in memory undo pool。private redo pool的使用要获取私有的redo allocation latch,获取后,标记此pool被使用,释放latch。in memory undo pool的使用要获取in memory undo latch,每次有undo change vector产生都要持有in memory undo latch。
2)在undo段头的slot中,记录事务已经开始,以及相关信息
3)标记每一个修改的块有private redo(但是并不真正的修改数据块)
3)把产生的undo change vector写入in memory undo pool
4)把产生的redo change vector写入private redo pool
5)事物提交的时候,把2个pool里的change vector结合成一个大的redo record
6)拷贝这个record到公有的redo buffer里,并且应用这个record到对应的数据块和undo块。
魏哥,第3步说并不是真正的修改数据块,这个数据块指的是?
第6步,应用这个record到对应的数据块,意思是给undo块的solt标记为commit?不太懂,能给解释下吗 |
|