一、什么是MVCC
MVCC(Multiversion concurrency control)多版本并发控制。顾名思义,MVCC是通过数据行的多个版本管理来实现数据库的并发控制。这项技术使得在InnoD8的事务隔离级别下执行一致性读操作有了保证。换言之就是为了查询一些正在被另一个事务更新的行,并且可以看到它们被更新之前的值,这样在做查询的时候就不用等待另一个事务释放锁。
二、快照读与当前读
1.快照读
快照读又叫做一致性读,读取的是快照数据,不加锁的简单SELECT语句都是快照读,即不加锁的非阻塞读。之所以出现快照读是基于提高并发性能的考虑。在很多情况下可以避免加锁操作,降低了开销。既然是基于多版本,快照读可能读到的并不一定是数据的最新版本,而有可能是之前的历史版本。快照读的前提是隔离级别不是串行级别,串行级别下的快照读会退化成当前读。
2.当前读
当前读读取的内容是记录的最新版本,读取时还要保证其他并发事务不能修改当前记录,会对读取的记录进行加锁。加锁的SELECT或者对数据库的增删改查都是当前读。
三、MVCC实现原理ReadView
MVCC实现的三个原理:隐藏字段、undo log和read view