mysql 多版本并发控制mvcc

  • 行级锁的一个变种
  • 避免了加锁,开销低
  • 非阻塞读操作,写操作是行级
  • 原理:使用数据在某个时间点的快照实现,不同事务在同一个时间可以看到同一个表中的不同数据。
  • 分类:乐观,悲观
  • 在一行中存储更多数据,检查工作也要增加,处理一些额外的内部操作。
  • 适用:rr,rc级别。ur会读到最新版本,sz会读取会锁定返回的每一行。

mysql 多版本并发控制mvcc_第1张图片

InnoDB通过为每个事务在启动时分配一个事务ID来实现MVCC。该ID在事务(A)首次读取任
何数据时分配。在该事务中修改记录时,将向Undo日志写入一条说明如何恢复该更改的
Undo记录,并且事务的回滚指针指向该Undo日志记录。这就是事务如何在需要时执行回
滚的方法。

当不同的会话(事务B)读取聚簇主键索引记录时,InnoDB会将该记录的事务ID与该会话的读取视
图进行比较。如果当前状态下的记录不应可见(更改它的事务尚未提交),那么Undo日
志记录将被跟踪并应用,直到会话达到一个符合可见条件的事务ID。这个过程可以一直
循环到完全删除这一行的Undo记录,然后向读取视图发出这一行不存在的信号。

你可能感兴趣的:(SQL,mysql,数据库)