什么是MVCC?
MVCC是现代数据库常用的处理读写冲突的手段,目的在于提高数据库高并发场景下的吞吐性能。如此一来不同事务在并发过程中,select操作可以不通过加锁而是通过MVCC机制获取指定的版本历史记录,并通过一些手段保证读取的的记录值符合事务所处的隔离级别,从而解决并发场景下的读写冲突。
MVCC的实现
MVCC的实现依赖于数据库记录中的三个隐式字段,undo log日志,readView
- 三个隐式字段
- undo log 日志:undo log日志又叫回滚日志,用于记录数据被修改前的信息,在表记录修改前会先把数据拷贝到undo log里,如果出现事务回滚,既可以通过undo log来还原数据。
- readView
MVCC实现原理分析
查询一条记录,基于MVCC,是怎样的流程:
- 获取事务自己的版本号,即事务ID
- 获取ReadView
- 查询得到的数据,然后与ReadView中事务的版本号进行比较
- 如果不符合ReadView的可见性规则,即就需要undo log中的历史快照
- 最后返回符合规则的数据
总结
INNODB实现MVCC,是通过ReadView +Undo log实现的。undo log保存了历史快照,ReadView可见性规则帮助判断当前版本是否可见。