MVCC -- 多版本并发控制

在了解MVCC之前,我们先来了解一下两个概念:当前读和快照读
当前读
当前读就是要读取数据行的当前最新的状态,防止其他线程对数据行进行变更,在读取的时候会对数据行进行加锁,是加锁阻塞读

快照读
快照读没有要求读到的数据一定要是最新的版本,不会对数据行进行加锁,是一种解决并发读写冲突的方式,是不加锁非阻塞读,拥有更好的并发性能。
我们平时一般的读取用到的都是快照读

什么是MVCC

mvcc就是决定快照读返回数据行的哪个版本的底层控制逻辑

MVCC的工作原理

mvcc 就是为数据行挑选一个合适的版本

每一行数据行都有是三个隐藏的字段:
1 操作该数据行的最新事务id
2 回滚指针,指向 undo 日志中的该数据行的上一个版本
3 隐藏的主键,如果数据行没有主键,会自动生成一个

这三个隐藏字段,其中有1和2是MVCC主要的参与者
配合undo log 以及 read view 共同完成mvcc的控制逻辑

什么是undo log
undo log 记录数据行的每一个历史版本,是一个链表的形式,一般主要用于事务的回滚

什么是read view
read view 是在读取数据行的时候,会将当前正在活跃的事务id 收集起来,从小到大排序

mvcc的控制逻辑

我们假设read view 中的最小值、最大值分别为a和b
数据行的当前事务id为x

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值