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回答
-
同学好,确实可能拿到的不是最后一次提交的数据,readView主要是类似用乐观锁的机制来获取数据,所以不保证数据是最新的,但是配合不同的事务隔离机制防止各类读取数据的问题
0122022-07-13
相似问题