MVCC机制

144 阅读1分钟

可重复读的情况下

沿用第一次查询生成的read view,这样就不会出现读到数据两次不一样的情况

read view的格式是

一个是事务的id,一个是回滚的指针

read view 的数组是包括数组里最小的id和 创建事务的最大id组成,未提交的部分就放到数组里保存。

可重复读的情况下,会生成快照,这个read view快照每次都是沿用之前生成的(因为要避免读两次数据不一样的情况)

然后依次去找id,如果在数组里的就跳过,然后向下找,直到找到已提交的; 如果比最小的还小,那肯定是可见的,如果比最大的还大,是不可见的

如果落在区间范围内,判断是否在数组里面

大概如图所示,MVCC是用来针对可重复读和读已提交两种状态的