什么是 MVCC

MVCC (Multiversion Concurrency Control) 中文全程叫多版本并发控制,是现代数据库(包括 MySQL、Oracle、PostgreSQL 等)引擎实现中常用的处理读写冲突的手段,目的在于提高数据库高并发场景下的吞吐性能。

如此一来不同的事务在并发过程中,SELECT 操作可以不加锁而是通过 MVCC 机制读取指定的版本历史记录,并通过一些手段保证保证读取的记录值符合事务所处的隔离级别,从而解决并发场景下的读写冲突。

先来了解一下什么是版本链:

几次执行的对应事务:

什么是ReadView

ReadView阅读视图,是“快照读”sql执行的时MVCC提取数据的依据,快照读就是普通的sql查询语句,当前读是指执行下面语句时的执行方式

MVCC如何实现RC和RR

RC,RR基于MVCC(多版本并发控制)进行并发事务控制,MVCC是基于“数据版本”对并发事务进行访问

实现RC(读已提交)

在每次快照读的时候都会产生新的ReadView

然后根据判断规则进行判断是否可以访问数据:

我们可以依次来分析一下

姓名 事务id 等于creator_id? trx_id < min_trx_id? trx_id > max_trx_id? min_trx_id < trx_id < max_trx_id 并且不在m_ids集合
张老三 3 × × × ×
张小三 2 × × × ×
张三 1 ×

由此可见,张三可以访问

但是读已提交为什么没有完成可重复读,因为在每次读的时候都会产生新的ReadView,当第一次产生的时候张小三还没有提交,但是第二次查询的时候生成ReadView已经提交,这时候就是:一个事务里面两次查询得到了不同的结果,就违背了可重复读。

实现RR(可重复读)

来看下RR是如何解决不可重复读的。

RC是在每次快照读的时候都会产生新的ReadView,而RR是仅在第一次快照读的时候生成ReadView,后序快照读复用,这样就解决了不可重复读的问题

但是还没有解决幻读的问题(第一次读之后又新增了数据导致读出来的数据不同)

读的时候又分为当前读快照读
快照读是由mvcc负责的,因为RR不管你读几次,都会是读的同一个Readview,所以每次读取都是相同的数据。
当前读是由Innodb的锁去解决的,间隙锁,第一次查出来的数据给这些数据上间隙锁,锁住读出来的数据,别人也不能插数据了,这样就解决了幻读的问题。

mysql默认的隔离级别是RR,是默认开启间隙锁的,所以在mysql的innodb引擎中是默认解决这个幻读的问题的。

【MVCC多版本并发控制】MVCC 机制的原理及实现,什么是MVCC,多版本并发控制相关推荐

  1. MVCC 机制的原理及实现

    什么是 MVCC MVCC (Multiversion Concurrency Control) 中文全程叫多版本并发控制,是现代数据库(包括 MySQL.Oracle.PostgreSQL 等)引擎 ...

  2. [Database] 关系型数据库中的MVCC是什么?怎么理解?原理是什么?MySQL是如何实现的?

    文章目录 前言 并发控制 并发控制的实现与锁的本质 MVCC是什么? MVCC的多版本(Multi-Version)指的是什么? MVCC的实现方式? MySQL的实现 PostgreSQL的实现 结 ...

  3. MySQL原理--隔离级别的实现方式--MVCC

    原文网址:MySQL原理--隔离级别的实现方式--MVCC_IT利刃出鞘的博客-CSDN博客 简介 本文介绍MySQL的隔离级别的实现方式--MVCC. 这也是Java后端面试题中常见的一个问题. M ...

  4. 【MySQL进阶】MySQL事务隔离与锁机制底层原理万字总结(建议收藏!!)

    [MySQL进阶]MySQL事务隔离与锁机制底层原理万字总结(建议收藏!!) 参考资料: 美团技术团队:Innodb中事务隔离级别和锁的关系 数据库的锁,到底锁的是什么? 阿里面试:说说一致性读实现原 ...

  5. Mysql锁机制及原理简析

    Mysql锁机制及原理简析 一.前言 1.什么是锁? 锁是计算机协调多个进程或线程并发访问某一资源的机制. 锁保证数据并发访问的一致性.有效性: 锁冲突也是影响数据库并发访问性能的一个重要因素. 锁是 ...

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

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

  7. Java序列化的机制和原理

    有关Java对象的序列化和反序列化也算是Java基础的一部分,下面对Java序列化的机制和原理进行一些介绍. Java序列化算法透析 Serialization(序列化)是一种将对象以一连串的字节描述 ...

  8. Redis数据持久化机制AOF原理分析一---转

    http://blog.csdn.net/acceptedxukai/article/details/18136903 http://blog.csdn.net/acceptedxukai/artic ...

  9. java序列化算法透析_Java序列化机制与原理的深入分析

    Java序列化算法透析 Serialization(序列化)是一种将对象以一连串的字节描述的过程:反序列化deserialization是一种将这些字节重建成一个对象的过程.Java序列化API提供一 ...

  10. 干货 | 彻底弄懂 HTTP 缓存机制及原理

    转载自  干货 | 彻底弄懂 HTTP 缓存机制及原理 前言 Http 缓存机制作为 web 性能优化的重要手段,对于从事 Web 开发的同学们来说,应该是知识体系库中的一个基础环节,同时对于有志成为 ...

最新文章

  1. 淘宝2011.9.21校园招聘会笔试题+答案
  2. Android应用内多进程分析和研究
  3. Apache服务器主配置文件 httpd.conf 中文版
  4. 设计模式 (3) : 单例模式的几种方法
  5. LambdaMART简介——基于Ranklib源码(一 lambda计算)
  6. Session在类库中的使用
  7. 【tensorFlow】——图像数据增强、读取图像、保存图像
  8. OSI模型数据链路层为什么需要分层?
  9. 自动驾驶安全驾驶规则_自动驾驶知识科普 自动驾驶汽车的七大核心技术
  10. mssql 字增自段怎样重置(重新自增)|清空表已有数据
  11. 厦门大学计算机学硕复试,【图片】一战厦大计算机上岸,经验帖。慢更【考研吧】_百度贴吧...
  12. (转)基于MVC4+EasyUI的Web开发框架经验总结(12)--利用Jquery处理数据交互的几种方式...
  13. fun-函数的数据类型小结
  14. MySQL数据库regdate_第十五章 MySQL 数据库
  15. 超级强大服务器终端,告别 XShell 打造强大的Windows 终端
  16. 用java异或的方式去实现简单的视频加密
  17. 计算机与单片机串口程序,51单片机与电脑串口通信,并用数码管显示的两种方法...
  18. 惠普m180n故障码04_惠普m180n打印机驱动(解决m180n打印机连接问题)V1.0 免费版
  19. 笔记本html外接显示器,提升效率 笔记本外接显示器(Intel篇)
  20. 几何分布期望与方差推导

热门文章

  1. 华为mate40pro和荣耀30Pro+ 哪个好
  2. mysql数据库导出mydump的拒绝访问:解决小方案
  3. sql命令未正确结束
  4. 即时通讯服务器的对比
  5. 第二部分 供应链网络的设计(三)设计全球供应链网络
  6. JS实现单选按钮和多选功能
  7. 幸存者游戏的12条启示
  8. React配置使用Bootstrap
  9. 广州蓝景分享—目前微前端架构的几种技术选型,你了解吗?
  10. ubuntu18.04VNC多用户占用同一桌面问题