MVCC
多版本并发控制。
MVCC 只在 RC 和 RR 两个隔离级别下工作。
不管需要执行多长时间,每个事务看到的数据都是一致的。根据事务开始的时间不同,每个事务对同一张表,同一时刻看到的数据可能是不一样的。
Undo log
undo log 是逻辑日志,将数据库逻辑地恢复到原来的样子,所有修改都被逻辑地取消了,支持事务回滚,保证了事务的原子性。
undo log 的另一个作用是 MVCC, MVCC 的实现是通过 undo 来完成的。当用户读取一行记录时,可以通过 undo log 读取之前的行版本信息,以此实现非锁定读取。保证了事务的隔离性。
MVCC 的实现原理
通过保存数据在某个时间点的快照来实现的:
InnoDB 每一行数据都有一个隐藏的回滚指针,用于指向该行修改前的最后一个历史版本(存放在 UNDO LOG中)。
每开始新的事务,系统版本号都会自动递增。事务开始时刻的系统版本号会作为事务的版本号,用来和查询记录的版本号进行比较。
MVCC 的优势
MVCC 最大的好处是读不加锁,读写不冲突,极大地增加了 MySQL 的并发性。
通过 MVCC,保证了事务 ACID 中的隔离性特性。