zoukankan      html  css  js  c++  java
  • InnoDB mvcc

    资料:

    MySQL-InnoDB-MVCC多版本并发控制

    快照读:

      select

      实现:MVCC 和 undo log

    当前读:

      select for update / in share mode

      insert

      update

      delete

      实现:record lock 和 gap lock

    InnoDB的mvcc与理想的mvcc:

    1. 一般我们认为MVCC有下面几个特点:

      • 每行数据都存在一个版本,每次数据更新时都更新该版本
      • 修改时Copy出当前版本, 然后随意修改,各个事务之间无干扰
      • 保存时比较版本号,如果成功(commit),则覆盖原记录, 失败则放弃copy(rollback)
      • 就是每行都有版本号,保存时根据版本号决定是否成功,听起来含有乐观锁的味道, 因为这看起来正是,在提交的时候才能知道到底能否提交成功
    2. 而InnoDB实现MVCC的方式是:

        • 事务以排他锁的形式修改原始数据
        • 把修改前的数据存放于undo log,通过回滚指针与主数据关联
        • 修改成功(commit)啥都不做,失败则恢复undo log中的数据(rollback) 
    3. 二者最本质的区别是: 当修改数据时是否要排他锁定,如果锁定了还算不算是MVCC?
    • Innodb的实现真算不上MVCC, 因为并没有实现核心的多版本共存, undo log 中的内容只是串行化的结果, 记录了多个事务的过程, 不属于多版本共存。但理想的MVCC是难以实现的, 当事务仅修改一行记录使用理想的MVCC模式是没有问题的, 可以通过比较版本号进行回滚, 但当事务影响到多行数据时, 理想的MVCC就无能为力了。

     

  • 相关阅读:
    一个浏览器循环刷新网页的例子
    Ajax和JSON基础
    HTML-第三章构建模块小结
    HTML-元素属性
    入前端坑的第一天
    JZOJ 【2021.11.10NOIP提高组联考】
    LG P2633 Count on a tree
    JZOJ 7339.改试卷
    [CEOI2017] Building Bridges
    拉格朗日插值法
  • 原文地址:https://www.cnblogs.com/GY8023/p/13726617.html
Copyright © 2011-2022 走看看