MVCC

MVCC

多版本并发控制。

MVCC 只在 RC 和 RR 两个隔离级别下工作。

不管需要执行多长时间,每个事务看到的数据都是一致的。根据事务开始的时间不同,每个事务对同一张表,同一时刻看到的数据可能是不一样的。

Undo log

undo log 是逻辑日志,将数据库逻辑地恢复到原来的样子,所有修改都被逻辑地取消了,支持事务回滚,保证了事务的原子性。

undo log 的另一个作用是 MVCC, MVCC 的实现是通过 undo 来完成的。当用户读取一行记录时,可以通过 undo log 读取之前的行版本信息,以此实现非锁定读取。保证了事务的隔离性。

MVCC 的实现原理

通过保存数据在某个时间点的快照来实现的:

InnoDB 每一行数据都有一个隐藏的回滚指针,用于指向该行修改前的最后一个历史版本(存放在 UNDO LOG中)。

每开始新的事务,系统版本号都会自动递增。事务开始时刻的系统版本号会作为事务的版本号,用来和查询记录的版本号进行比较。

MVCC 的优势

MVCC 最大的好处是读不加锁,读写不冲突,极大地增加了 MySQL 的并发性。
通过 MVCC,保证了事务 ACID 中的隔离性特性。


   转载规则


《MVCC》 wangyixin-tom 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
读写分离 读写分离
mysql主从复制中异步复制和半同步复制的原理;可靠性/可用性优先策略下的主从切换;备库并行复制策略;主从延迟的原因和判断方法;主备切换的多种方法;过期读的解决方案;
2021-03-15
下一篇 
事务 事务
事务ACID、隔离级别及实现。分析了事务可见性,介绍了Binlog、redolog,并加以对比。数据库不丢数据的设置,给出了使用事务的建议。
2021-03-14
  目录