MVCC
2021-07-21 00:58:40 4 举报
MySQL MVCC
作者其他创作
大纲/内容
未开始的事务
low = 3
MVCC到底该如何理解?1.在当前事务启动时,会创建一个readview2.会记录当前活跃的事务id放到一个数组中保存3.使用创建readview时的tx_id去与数组中的事务id以及系统内最大的事务id去做比较4.此时会有三种情况出现 a.tx_id小于低水位线时,此时事务都是已提交的,所以可见 b.tx_id大于高水位线时,此时事务都是将来启动的事务,所以不可见 c.tx_id在其中间时,如果tx_id在数组中,则为未提交事务,所以不可见 如果未包含在数组中,则是已提交事务,所以可见
系统内最大的tx_id = 9
低水位线
高水位线
MVCC
已提交的事务
似乎有点明白是什么意思了:首先row_tx_id为数据行的事务id,也就是最近被哪个事务更新了。然后我们应该使用row_tx_id去和数组去进行比较,而不是反过来比较,这个id才是主体!数组只是被比较的东西。由于这个id的值始终是递增的,所以说如果某一行数据的id小于低水位线,那么这个事务一定是已经提交了的!!!但是!!!还有一种情况就是一部分已经提交了的数据但没有在这部分,而是应该存在于低水位线与高水位线之间,但不包含在活跃事务的数组中,为什么会出现这种现象呢?因为这个回滚链的id并不是递增的!而是哪个事务修改了,那么就会把这个事务的id放在回滚链的最前面!!!所以就会出现这种情况
所有未提交的事务
版本未提交,不可见;版本已提交,但是是在视图创建后提交的,不可见;版本已提交,而且是在视图创建前提交的,可见。
0 条评论
下一页