MVCC 多版本并发控制

63 阅读1分钟

MVCC 对版本并发控制可以解决 读-写 并发冲突,提高并发性能。

MVCC 就是存储了同一条数据的不同历史版本链,不同事务可以访问不同的数据版本。

MySQL 的 InnoDB 中 给表有两个重要的隐藏字段:

  • DB_TRX_ID : 创建或者修改数据的事务ID。
  • DB_ROLL_PTR : 回滚指针,指向记录的上一个版本。

image.png

image.png

image.png

当前读和快照度

当期读

当前读就是读取记录的当前(最新)版本,其他事务不能修改记录 所以会加锁。

  • SELECT ... LOCK IN SHARE MODE
  • SELECT ... FOR UPDATE
  • INSERT
  • UPDATE
  • DELETE

快照读

快照读(SELECT)是指读取 MVCC 版本链中的某个快照版本,不需要加锁。

读视图 Read View

Read View 是事务进行快照度时产生的读视图,记录并维护当前活跃事务的id。

image.png

参考:参考