https://www.jianshu.com/p/8845ddca3b23
- 前提概要
- 什么是MVCC
- 什么是当前读和快照读?
- 当前读,快照读和MVCC的关系
- MVCC实现原理
- 隐式字段
- undo日志
- Read View(读视图)
- 整体流程
- MVCC相关问题
- RR是如何在RC级的基础上解决不可重复读的?
- RC,RR级别下的InnoDB快照读有什么不同?
-
快照读
像不加锁的select操作就是快照读,即不加锁的非阻塞读;快照读的前提是隔离级别不是串行级别,串行级别下的快照读会退化成当前读;之所以出现快照读的情况,是基于提高并发性能的考虑,快照读的实现是基于多版本并发控制,即MVCC,可以认为MVCC是行锁的一个变种,但它在很多情况下,避免了加锁操作,降低了开销;既然是基于多版本,即快照读可能读到的并不一定是数据的最新版本,而有可能是之前的历史版本
说白了MVCC就是为了实现读-写冲突不加锁,而这个读指的就是快照读, 而非当前读,当前读实际上是一种加锁的操作,是悲观锁的实现