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 无法实现。
领取专属 10元无门槛券
私享最新 技术干货