918 B
918 B
- 多版本并发控制
- 为了解决脏读,不可重复读的情况
- 基于Undo版本链接和ReadView来实现的,每个事务都有自己的版本号,
- MVCC无法解决幻读,需要配合锁来实现
- 当前读
- select for update
- select lock in share mode
- insert update delete
- 快照读
- 维护了同一个行的多个版本,查询时会返回对应的事务的修改版本
- 原理
- 隐藏字段
- 行记录,trx_id,roll_point
- undo版本链,由当前最新记录+该记录之间的undo日志
- readview
- 决定返回哪个版本的数据,版本链返回规则/可见性算法
- 当前活跃事务id
- 最大事务id +1
- 最小事务id
- readview创建者事务id
- 隐藏字段
- RC和RR下
- RC,每一次快照读都会生产readview
- RR,只有第一次快照读生成readview后面复用
- MVCC解决了读写阻塞,再RR下快照读方面避免了出现幻读的问题