MVCC 对版本并发控制可以解决 读-写 并发冲突,提高并发性能。
MVCC 就是存储了同一条数据的不同历史版本链,不同事务可以访问不同的数据版本。
MySQL 的 InnoDB 中 给表有两个重要的隐藏字段:
- DB_TRX_ID : 创建或者修改数据的事务ID。
- DB_ROLL_PTR : 回滚指针,指向记录的上一个版本。
当前读和快照度
当期读
当前读就是读取记录的当前(最新)版本,其他事务不能修改记录 所以会加锁。
- SELECT ... LOCK IN SHARE MODE
- SELECT ... FOR UPDATE
- INSERT
- UPDATE
- DELETE
快照读
快照读(SELECT)是指读取 MVCC 版本链中的某个快照版本,不需要加锁。
读视图 Read View
Read View 是事务进行快照度时产生的读视图,记录并维护当前活跃事务的id。
参考:参考