框架原理

Mysql MVCC机制

2019-02-14  本文已影响10人  黄靠谱

概述

MVCC下的写操作伴随着真实的操作索引的,这是导致了幻读的现象,但是可以保证索引的快速感知。
比如唯一性索引,事务A尝试插入一个值,但是没有提交。此时事务B尝试插入一个相同的值,这个时候就会出现幻读,系统快速反馈插入失败,避免了事务B只有在提交的时候,才感知到这个事情。

Mysql的MVCC依赖:Txid和活跃事务列表

  1. 比如当前系统Txid=1000,数据a=100
  2. 开始事务A Txid=1001,事务A修改一个数据a=200,该数据的TXID=1001,但是未提交
  3. 此时开启事务B,Txid=1002,读取数据a=100
  4. 此时事务A提交数据 TXID=1001,数据a的最新版本是1001
  5. 此时事务B重复读取数据a,数据a在系统中的Txid为1001,但是仍然读取不到,否则就不叫可重复读了,MVCC会去热点视图中check,Txid1001的数据,是否在Txid1002开启的时候已经提交。如果已经提交就可以读取,如果未提交,则要排除掉这个数据。

读写规则

  1. SELECT

这种机制避免了3种情况:

  1. INSERT:InnoDB为每个新增行记录当前系统版本号作为创建ID。
  2. DELETE:InnoDB为每个删除行的记录当前系统版本号作为行的删除ID。
  3. UPDATE:InnoDB复制了一行。这个新行的版本号使用了系统版本号。它也把系统版本号作为了删除行的版本。

参考

官网说明
https://dev.mysql.com/doc/refman/5.7/en/innodb-multi-versioning.html

热点视图
https://www.cnblogs.com/chinesern/p/7592537.html

上一篇 下一篇

猜你喜欢

热点阅读