1. 什么是MVCC?
MVCC,全称Multi-Version Concurrency Control,即多版本并发控制。它是一种并发控制方法,广泛用于数据库管理系统中,以实现对数据库的并发访问。在编程语言中,它实现事务内存。MVCC在MySQL InnoDB中的实现主要是为了提高数据库的并发性能,用更好的方式处理读写冲突,做到即使有读写冲突时,也能做到不加锁,非阻塞并发读。
2. 当前读
像 select lock in share mode
(共享锁)、select for update
、update
、insert
、delete
(排他锁)这些操作都是当前读。所谓当前读,就是读取记录的最新版本,并在读取时保证其他并发事务不能修改当前记录,会对读取的记录进行加锁。
3. 快照读
不加锁的 select
操作就是快照读,即不加锁的非阻塞读。快照读的前提是隔离级别不是串行级别,串行级别下的快照读会退化成当前读。快照读的出现是为了提高并发性能,基于多版本并发控制(MVCC)实现,可以认为MVCC是行锁的一个变种,但它在很多情况下避免了加锁操作,降低了开销。快照读可能读到的并不一定是数据的最新版本,而有可能是之前的历史版本。
4. 当前读、快照读、MVCC的关系
MVCC多版本并发控制指的是维持一个数据的多个版本,使得读写操作没有冲突。快照读是MySQL为实现MVCC