MVCC
Multi-Version Concurrency Control 多版本并发控制
解决了什么问题
- 使得数据库读操作不会对数据加锁,提高并发请求能力
- 借助 MVCC 实现多种隔离级别,保证 ACID 当中的隔离性
实现方式
- 每个 SQL 都会创建 ReadView(ReadView 是当前所有事物 ID 集合)
- 当新的 SQL 执行时,拿当前的事物 ID 和所有 ReadView 进行比较,然后决定是否从 undo log 中读取数据
- READ-COMMITTED 事务内的每个查询语句都会重新创建 Read View,这样就会产生不可重复读现象发生
- REPEATABLE-READ 事务内开始时创建 Read View , 在事务结束这段时间内 每一次查询都不会重新重建 Read View ,都会重复复用第一个 ReadView 从而实现了可重复读
Simple is Awesome