MySQL-18丨MVCC

Posted by jiefang on October 28, 2019

MVCC

什么是 MVCC 呢?

MVCC, 即多版本并发控制。MVCC的实现,是通过保存数据在某个时间点的快照来实现的,也就是说,不管需要执行多长时间,每个事务看到的数据都是一致的。根据事务开始的时间不同,每个事务对同一张表,同一时刻看到的数据可能是不一样的。

MVCC实现原理

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

如图,执行 update t20 set b=666 where a=1; 时,会将原记录放到 undo 表空间中,并通过隐藏的回滚指针指向该记录。在本节开始的实验中的第 6 步中,session2 查询的结果是session1 修改之前的记录,这个记录就是来自 undo log 中。

MVCC优势

MVCC最大的好处是读不加锁,读写不冲突,极大得增加了MySQL的并发性。通过MVCC保证了ACID的I(隔离性)。