read view 创建依赖的数据版本

来源:3-16 锁模块之当前读和快照读

坐看落花

2021-07-10

过了很长时间, 再刷面试题还是有一些疑惑, 就是关于read view 依赖的数据版本
老师是说当select数据的时候 创建readView , read view 创建 会先拿到数据 然后 看数据的db_trx_id, 和系统当前系统其它活跃事务id比较, 如果大于则根据数据的db_roll_ptr去拿undo 日志, 如果这个历史版本的db_trx_id 仍然大于当前系统其它活跃事务id, 就继续重复上一步, 直至历史版本的db_trx_id 小于系统其它活跃事务id, 认为此时的版本是稳定的, 依赖此版本创建readView,
上面过程的目的是为了拿到稳定版本的数据, 但是上面的步骤也是有可能拿到过时版本的数据的, 因为稳定版本的数据一定是说 当前数据最后一次事务提交那个版本, 而和系统其它活跃事务id比较, 最后一次提交是有可能大于当前系统其它活跃事务id的, 按照上面的算法拿到的数据版本不是最后一次提交的事务id对应的版本

写回答

1回答

翔仔

2021-07-10

同学好,确实可能拿到的不是最后一次提交的数据,readView主要是类似用乐观锁的机制来获取数据,所以不保证数据是最新的,但是配合不同的事务隔离机制防止各类读取数据的问题

0
12
马化腾hehe
回复
坐看落花
话说你研究的很深,也是我一直纠结的地方,我也去看看上边链接😂
2022-07-13
共12条回复

剑指Java面试-Offer直通车 百度资深面试官授课

招聘季即将到来,让百度资深面试官来为你的高薪Offer保驾护航

8427 学习 · 1870 问题

查看课程