多版本并发控制

  Multiversion Concurrency Control

  大部分的MySQL的存储 引擎,比如InnoDB,Falcon,以及PBXT并不是简简单单的使用行锁机制。它们都使用了行锁结合一种提高并发的技术,被称为MVCC(多版本并 发控制)。MVCC并不单单应用在MySQL中,其他的数据库如Oracle,PostgreSQL,以及其他数据库也使用这个技术。

  MVCC避免了许多需要加锁的情形以及降低消耗。这取决于它实现的方式,它允许非阻塞读取,在写的操作的时候阻塞必要的记录。

  MVCC保存了某一时刻数据的一个快照。意思就是无论事物运行了多久,它们都能看到一致的数据。也就是说在相同的时间下,不同的事物看相同表的数据是不同的。如果你从来没有这方面的经验,可能说这些有点令人困惑。但是在以后这个会很容易理解和熟悉的。

  每个存储引擎实现MVCC方式都是不同的。有许多种包含了乐观(optimistic)和悲观(pessimistic)的并发控制。我们用简单的InnoDb的行为来举例说明MVCC工作方式。

   InnoDB实现MVCC的方法是,它存储了每一行的两个额外的隐藏字段,这两个隐藏字段分别记录了行的创建的时间和删除的时间。在每个事件发生的时 候,每行存储版本号,而不是存储事件实际发生的时间。每次事物的开始这个版本号都会增加。自记录时间开始,每个事物都会保存记录的系统版本号。依照事物的 版本来检查每行的版本号。在事物隔离级别为可重复读的情况下,来看看怎样应用它。

  SELECT

  InnoDB检查每行,要确定它符合两个标准。

  InnoDB必须知道行的版本号,这个行的版本号至少要和事物版本号一样的老。(也就是是说它的版本号可能少于或者和事物版本号相同)。这个既能确定事物开始之前行是存在的,也能确定事物创建或修改了这行。

  行的删除操作的版本一定是未定义的或者大于事物的版本号。确定了事物开始之前,行没有被删除。

  符合了以上两点。会返回查询结果。

  INSERT

  InnoDB记录了当前新增行的系统版本号。

  DELETE

  InnoDB记录的删除行的系统版本号作为行的删除ID。

  UPDATE

  InnoDB复制了一行。这个新行的版本号使用了系统版本号。它也把系统版本号作为了删除行的版本。

  所有其他记录的结果保存是,从未获得锁的查询。这样它们查询的数据就会尽可能的快。要确定查询行要遵循这些标准。缺点是存储引擎要为每一行存储更多的数据,检查行的时候要做更多的处理以及其他内部的一些操作。

  MVCC只能在可重复读和可提交读的隔离级别下生效。不可提交读不能使用它的原因是不能读取符合事物版本的行版本。它们总是读取最新的行版本。可序列化不能使用MVCC的原因是,它总是要锁定行。

  下面的表说明了在MySQL中不同锁的模式以及并发级别。

锁的策略                    并发性                开销                  引擎
最低 最低 MyISAM,Merge,Memory
NDB Cluster
行和MVCC 最高 最高 InnoDB,Falcon,PBXT,solidD

MYSQL MVCC实现及其机制相关推荐

  1. mysql 锁机制 mvcc_轻松理解MYSQL MVCC 实现机制

    轻松理解MYSQL MVCC 实现机制 轻松理解MYSQL MVCC 实现机制 #### 1. MVCC简介 ##### 1.1 什么是MVCC MVCC是一种多版本并发控制机制. ##### 1.2 ...

  2. mysql mvcc update_MySql MVCC机制

    Multiversion concurrency control 多版本并发控制 并发访问(读或者写)数据库时,对正在事务内处理的数据做多版本的管理,用来避免由于写操作的堵塞,而引发读操作失败的并发问 ...

  3. Mysql事务以及加锁机制事务的特征ACID

    Mysql事务以及加锁机制 事务的特征ACID,即原子性.一致性.隔离性.持久性. 原子性保证一个事务为一个最小的单元,内部不可分割: 一致性保证事务中的每个操作线程不可单独提交,成功则一起提交,不成 ...

  4. MySQL事务分析和锁机制分析

    MySQL事务分析和锁机制分析 事务 事务控制语句 目的 组成 特征 概念 redo日志 undo日志 MVCC多版本并发控制Multi version concurrency control ACI ...

  5. mysql mvcc

    mysql MVCC MVVC 实现:排他锁+undolog+版本事务链+一致性read-view视图+版本事务链匹配规则 一致性非锁定读 在 InnoDB 存储引擎中,多版本控制 (multi ve ...

  6. Mysql事务回滚机制与原理

    Mysql事务回滚机制与原理 文章目录 Mysql事务回滚机制与原理 一.事务回滚机制 二.使用到的技术讨论 三.redo log和undo log介绍 3.1 redo log 3.2 undo l ...

  7. 从ReadView深入理解MySql MVCC原理

    MySql MVCC 机制 在说MVCC机制前我们先了解ReadView. ReadView是什么呢?在我们平时执行一个事务的时候,就会生成一个ReadView,ReadView的组成结构大致如下 参 ...

  8. jdbc mysql 自动重连_JDBC实现Mysql自动重连机制的方法详解

    JDBC是Java程序连接和访问各种数据库的API,它可以提供Java程序和各种数据库之间的连接服务,下面是爱站技术频道小编为大家带来的JDBC实现Mysql自动重连机制的方法详解. 日志:using ...

  9. 利用mysql的预编译机制_SQL注入笔记记录+MySQL的事务隔离级别

    (一)SQL注入. 1.如何理解SQL注入? SQL注入是一种将SQL代码添加到输入参数中,传递到SQL服务器解析并执行的一种攻击手法. 2.SQL注入是如何产生的? web开发人员无法保证所有的输入 ...

最新文章

  1. 那还剩下多少学习激情?
  2. toolbar ,textfield,图片拉伸,Bundle
  3. Linux别名的创建删除【alias】和【unalias】
  4. html figure标签并排显示,html figure标签怎么用
  5. 程序开发中那些莫名奇妙的bug
  6. 微信验证以及登录流程
  7. 经典C语言程序100例之九五
  8. MQ消息队列之MSMQ
  9. php hashids思路,使用composer添加hashids加密数字
  10. 流程管理无效的几个判定标准?
  11. python 命令行运行 多进程_Python初学——多进程Multiprocessing
  12. [转]五个值得关注的图形数据库
  13. 计算机管理说文件缺失lnk,Win10系统右键管理打不开提示Windows找不到文件Server manager.lnk如何解决...
  14. java实时百分比进度条_Java 进度条百分比简单算法,根据数据量计算
  15. 国产操作系统统信UOS简单体验评测
  16. 《解忧杂货店》读后感:路一直都在,进步就是幸福
  17. Windows程序设计-位图和位块传输
  18. 【ES实战】_forcemerge API 使用说明
  19. 快递柜模拟程序【感知与控制】
  20. JavaScript 的DOM对象

热门文章

  1. 今天刚查到的宏,学习
  2. python安装redis库
  3. 王之泰201771010131《面向对象程序设计(java)》第九周学习总结
  4. MySql随笔part3 表操作
  5. 同步异步单线程多线程初级理解
  6. 各种排序笔记---基于比较排序部分
  7. Java关于Properties用法的总结(一)
  8. MATLAB中的randi函数
  9. DIV的边距属性在Chrome和IE中的区别
  10. 浏览器检测,移动网络的在线离线及网络状态