mysql mvcc 的理解

MVCC(多版本并发控制)是InnoDB存储引擎实现高并发读写的重要机制。它通过undo日志和readview确保在不同事务隔离级别下,读操作无需锁定数据。当进行快照读时,InnoDB会创建一个readview,根据事务ID判断数据可见性,从而避免锁竞争,提高系统性能。undo日志记录了数据的旧版本,用于回滚和不可见数据的查找。
摘要由CSDN通过智能技术生成

Mvcc的设计初衷

mysql官网解释是

A consistent read means that InnoDB uses multi-versioning to present to a query a snapshot of the database at a point in time. The query
sees the changes made by transactions that committed before that point of time

翻译:快照读意味着InnoDB提供数据库在某个时间点的快照。查询将查看在此时间点之前提交的事务所做的更改
mysql mvcc设计初衷:
1.实现mysql事务各种隔离级别
2.实现读与写的无锁化

mvcc具体实现

要搞清楚mvcc,首先要理解两个undo日志和readview两个概念。

undo日志

Undo日志分为更新undo日志和插入undo日志 ,
插入undo日志会在插入成功之后被删除,更新undo日志是旧数据的拷贝版本

readview

Readview是指在一个事务中进行一次快照读的时候,会扫描当前活跃中的事务id作为一个字段,最小的活跃的事务的Id作为一个字段,最大的活跃事务id 加上1作为一个字段。

快照读流程

1 先拿当前最新数据的事务id和readview中的最小事务id比较,如果最新数据的事务id小,则当前数据可见
2 拿当前数据的事务id和readView中最大事务ID加上1的字段比较,如果如果当前数据事务iD大或者相等,则表示数据不可见
3如果以上条件不满足可见,那所说明当前数据的事务Id 在readview区间内,而Readview中包含活跃的事务Id,而事务id是自增的,所以该区间内其他的事物id也是快照读之前提交的事物,那判断如果readview中包含当前数据的事务id 如果包含则说明不可见,不包含则可见
4以上如果哪个条件判断当前数据不可见,则从undo日志中从首往尾直到找到可见的数据

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

那年的夏天123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值