美文网首页
mvcc多版本控制

mvcc多版本控制

作者: 霍运浩 | 来源:发表于2019-03-09 20:47 被阅读0次

    MySQL的大多数事务型存储引擎都不是简单的行级锁。各大数据库基本都采用MVCC,但不尽相同。

    InnoDB的简化版:(MVCC实现原理)
    在每行记录后面保存两个隐藏的列来实现,一个保存了行的创建版本号,一个保存行的过期版本号(删除版本号)。

    版本号:

    1. 系统版本号:每开始一个新的事务,系统版本号就会自动增加
    2. 事务版本号:事务开始时刻的系统版本号

    当执行select操作时候:

    1. 只查找版本早于当前事务版本的数据行。 确保事务读取的行,在事务开始之前就存在的,或者是事务自身插入或者修改过的。
    2. 行的删除版本号要么未定义,要么大于当前事务版本号。 确保事务查询到的行,在事务开始之前没被删除。

    insert操作:
    为新插入的每一行保存当前系统版本号为行创建版本号。

    delete操作:
    为删除的行保存当前系统版本号作为行删除版本号。

    update操作:
    为插入一行新数据保存当前版本号作为该新行行创建版本号,同时保存当前系统版本号到原来的行作为行删除版本号。

    可见update = delete+insert

    采用MVCC这个原理,大多操作可以不用加锁,使得读数据操作简单,性能好,缺点是额外的存储空间消耗,更多的行检查和维护工作。MVCC只能在REPEATABLE READ 和READ COMMITTED两个隔离级别下工作。其他两个隔离级别跟MVCC不兼容。

    相关文章

      网友评论

          本文标题:mvcc多版本控制

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