• 多版本并发控制MVCC


    • MVCC说明
    MVCC只适用于repeatable read和read commit两个隔离级别
    (read uncommit总是读取最新的数据行,不符合当前事务版本的数据行)
    (serializable则会对所用行加锁)
    MVCC是行锁的一种变种
    根据不同的存储引擎,MVCC有不同的实现,典型的有乐观并发控制和悲观并发控制
    它避免了加锁操作,因此开销更低
    MVCC是通过保存数据在某一时间点的快照实现的。
     
    • InnoDB的MVCC介绍
    InnoDB的MVCC是通过在每行记录后面保存两个隐藏的列来实现,这两列一个是保存了行的创建 时间,一个是保存了行的过期时间(或者删除时间);
    存储的不是实际的时间值,而是系统的版本号(system version number)
    每开始一个新事物,系统版本号会自动递增,事物开始时间的系统版本号会作物事务的版本号,用来和查询到的每行记录版本号进行比较;
    select:
    innodb会根据以下两个条件检索每行记录:
    a.innodb只查询行版本号早于当前事物版本的数据行(也就是说行的系统版本号小于或者等于事务的系统版本号),这样保证事务读取的行要么是事务开始前已经存在的,要么是事物自身插入或者修改的。
    b.行的删除标识要么未定义,要不大于当前事务版本号,这确保事务读取到的行,在事务开始前未被删除。
     
    insert:
    innodb新插入的每一行保存当前系统版本号作为行版本号
    update:
    innodb为插入一行新记录,保存当前系统版本号作为行版本号,同时保存系统当前系统版本号到原来的行作为行删除标识
    delete:
    innodb为删除的每一行保存系统当前系统版本号作为行删除标识
     
    MVCC不足之处是会占用额外的空间,因此每行都会保存两个列版本哈
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
    收藏文章数量从多到少与“把书读薄”是一个道理
  • 相关阅读:
    Web开发中的显示与隐藏
    Html中的表格
    go标准库的学习-encoding/json
    go-simplejson文档学习
    go标准库的学习-regexp
    go标准库的学习-net
    go标准库的学习-strconv-字符串转换
    go标准库的学习-strings-字符串操作
    go标准库的学习-net/rpc
    go标准库的学习-net/rpc/jsonrpc
  • 原文地址:https://www.cnblogs.com/use-D/p/9544997.html
Copyright © 2020-2023  润新知