美文网首页
InnoDB MVCC思路

InnoDB MVCC思路

作者: 不明电波 | 来源:发表于2017-09-21 11:30 被阅读63次

    MVCC

    MVCC即多版本并发控制。数据库的事务型存储引擎基于提升并发性能的实现会使用MVCC。

    MVCC的实现,是通过保存数据在某个时间点的快照来实现的。即是说,事务不管需要执行多长时间,其看到的数据都是一致的。

    InnoDB的MVCC

    InnoDB的MVCC,是通过在每行记录后面保存两个隐藏的列来实现的。一个保存了行的创建时的系统版本号,一个保存行的过期(删除)时的系统版本号。每开始一个事务系统版本号都会递增,事务开始时刻的系统版本号会作为事务的版本号。

    规则

    • 增:记录的创建版本=当前事务版本
    • 删:记录的删除版本=当前事务版本
    • 改:原记录的删除版本=当前事务版本,新增记录的创建版本=当前事务版本
    • 查:满足 当前事务版本>=记录的创建版本 并且 当前事务版本<记录的删除版本

    举例:(隔离级别为REPEATABLE READ,以v1代表事务版本号为1)

    数据 创建版本 删除版本
    row1 abc 1 -
    row2 xyz 2 -

    事务(v1)插入row1,此时row1创建版本为1
    事务(v2)插入row2,此时row2创建版本为2

    事务(v3)查询row1和row2,此时满足row1和row2的创建版本小于或等于当前事务版本号,并且删除版本为空或者大于当前事务版本号,创建版本为1的row1、创建版本为2的row2作为查询结果返回

    当事务(v3)查询中,事务(v4)删除了row1,并且对row2进行了修改(删除记录然后新增),则此时表结构为:

    数据 创建版本 删除版本
    row1 abc 1 4 (deleted)
    row2 xyz 2 4 (deleted)
    row2 xy 4 (inserted)

    这时事务(v3)的的查询结果仍然为创建版本为1的row1和创建版本为2的row2

    相关文章

      网友评论

          本文标题:InnoDB MVCC思路

          本文链接:https://www.haomeiwen.com/subject/ikrzsxtx.html