Mysql中InnoDb引擎MVCC原理详解,机制的实现原理

Multi-Version Concurrency Control 多版本并发控制,MVCC 是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问,在编程语言中实现事务内存。事务具有4个基本特征,分别是:原子性(Atomicity)一致性(Consistency)隔离性(Isolation)持久性(Duration)简称ACID,这是标准SQL规范,InnoDB通过自己的方式实现之

MVCC是Multi Version Concurrency Control的简称,代表多版本并发控制。为什么需要MVCC,还要从数据库事务的ACID特性说起。相信很多朋友都了解ACID,它们分别代表了Atomicity(原子性), Consistency(一致性), Isolation(隔离性), Durability(持久性)。

三种并发控制机制:分别是悲观并发控制、乐观并发控制和多版本并发控制,其中悲观并发控制其实是最常见的并发控制机制,也就是锁;而乐观并发控制其实也有另一个名字:乐观锁,乐观锁其实并不是一种真实存在的锁,我们会在文章后面的部分中具体介绍;最后就是多版本并发控制(MVCC)了,与前两者对立的命名不同,MVCC 可以与前两者中的任意一种机制结合使用,以提高数据库的读性能。

锁主要包含S锁和X锁,由于S锁与X锁互斥,故如果有其他事务对数据行加了X锁,则其他事务,不管是读事务还是写事务,再申请加S锁或X锁时,都需要阻塞,所以这样会影响并发性能。在innodb存储引擎当中,由于默认隔离级别为REPEATABLE READ(可重复读),对于读操作SELECT,默认是使用MVCC机制实现一致性非锁定读,该机制不需要对数据行进行加锁,故不会占用和等待数据行上的锁,提供了并发性能

多版本并发控制(Multi-Version Concurrency Control, MVCC)是 MySQL 的 InnoDB 存储引擎实现隔离级别的一种具体方式,用于实现提交读和可重复读这两种隔离级别。而未提交读隔离级别总是读取最新的数据行,无需使用 MVCC。可串行化隔离级别需要对所有读取的行都加锁,单纯使用 MVCC 无法实现。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190925A083UX00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励