2021-06-29 mvcc多版本并发控制的理解

https://blog.csdn.net/SnailMann/article/details/88388829?spm=1001.2014.3001.5501

https://blog.csdn.net/SnailMann/article/details/94724197?spm=1001.2014.3001.5501

举例子:
当前事务id为2
当前活跃事务有事务1,3
事务4在事务2快照前更新

此时Read View记录 活跃事务1,3id ,还记录最小id1,最大id为5(事务4+1=5)

我们当前事务2在快照该行记录, 会拿 当前事务id=2 和 读视图readview中 1,3,5做比较. , 并非小于1,并非大于5, 也不是活跃的1,3 ,符合可见性; 从undo里看到的上一个事务4对事务2快读时是可见的;;;那么事务2能读到事务4交的版本, 说明事务4是全局角度的最新版本

总结:MVCC,做到即使有读写冲突时,也能做到不加锁,非阻塞并发读
在当前事务快照读时: 通过 当前事务id 和 读视图中记录的事务id(最小/大事务id,当前活跃事务)比较, 如果小于最小,大于最大则不合理,不可见, 如果是活跃事务,也不可见… 都不是的话,就可见,说明是 在undo里上一个版本的.
总的来说:通过 快照读,读视图,undo, 很容易找到上一个版本, 多个版本并发的读-写,也就有序,不冲突了. 即mvcc通过多版本解决了事务并发问题.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值