浅谈MySQL 高性能下的产物——MVCC

相信大家多多少少都听过或者了解过MVCC,知道它大致是一个什么东西,但是想把它讲明白,讲清楚却不是那么容易。

首先我们先解析一下MVCC 的中文名称——多版本并发控制。这个词语我们可以拆分为两个部分来解读,一个是多版本,一个是并发控制;

首先多版本的意思就是,在数据库的每一行数据,它都可能存在多个版本;然后并发控制就是要从这多个版本中,选出某个适合当前操作的版本。

当前读和快照读

所谓的当前读就是在我们使用

select ... lock in share modeselect ... for update和insert、update、delete 等操作的时候读取的是数据的最新版本当前读会对读取到的记录加锁当前读是和锁息息相关的

快照读就是想要读取的行 正在执行 DELETE 或 UPDATE 操作,这时读取操作不会去等待行上锁的释放。相反地,会去读取行的一个快照数据(从多个版本中获取某一个版本的数据),这里的读取其实就是基于MVCC 的非阻塞读。

MVCC 的实现的核心

MVCC 的实现依赖于:隐藏字段、Read View、undo log

隐藏字段

在内部,InnoDB 存储引擎为每行数据添加了两个 隐藏字段(其实是四个字段,但是这里MVCC机制一般只需要用到两个字段)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值