zoukankan      html  css  js  c++  java
  • MySQL多版本并发控制(MVCC)

    MVCC是行级锁的一个变种,但是它在很多的情况下避免了加锁操作,因此开销更低。MySQL,包括Oracle、PostgreSQL都实现了MVCC,虽然每个关系数据库实现不一样,但大都是实现了非阻塞的读操作,写操作也只锁定必要的行。

    MVCC的实现原理:InnoDB的MVCC的实现原理,是通过在每行记录后面保存两个隐藏的列来实现的。这两个列,一个保存了行的创建时间,一个保存行的过期时间或删除时间。MVCC实现类型都是有乐观并发控制和悲观并发控制。

    MVCC下的SELECT、INSERT、DELETE、UPDATE是如何进行操作的:

     

    SELECT:需要满足两个条件

    1、只查询行版本号小于当前事务的版本号的行 

    2、查询删除版本大于当前事务的版本号的行、要么未定义的删除版本号的行

    条件一确保了读取的行在读取之前就已经存在了而不是在读取更新之后的行

    条件二确保了在查询之前未被删除

    条件一和条件二满足了MySQL隔离级别中的可重复读

     

    INSERT:

    新插入的每一行保存当前系统版本号作为行版本号

     

    DELETE:

    每删除一行保存当前系统版本好作为删除版本号

     

    UPDATE:

    插入一行新记录,保存当前系统版本号作为行版本号, 同时保存当前系统版本号到原来那一行数据的行删除版本号。(可以看做执行了一次INSERT和一次DELETE操作)

     

     

      MVCC只在REPEATABLE READ和READ COMMITTED两个隔离级别下工作。

      其他两个隔离级别都和MVCC不兼容,因为READ UNCOMMITTED总是读取最新的数据行,而不是符合当前事务版本的数据行。而SERIALIZABLE则会对所有读取的行都加锁。

     

     

     

     
  • 相关阅读:
    android之下载416错误
    eclipse之常用工具总结
    php之Callback 回调类型
    smarty的自定义函数
    Unable to open sync connection异常
    android之android Studio 安装后打不开的解决方法
    android之ExpandableListView 的滑动到底部的精确监听事件
    wampserver2.0下配置虚拟主机
    wc之初认识
    php开发中常见函数记录
  • 原文地址:https://www.cnblogs.com/shenyunwen/p/9374735.html
Copyright © 2011-2022 走看看