【MVCC多版本并发控制】MVCC 机制的原理及实现,什么是MVCC,多版本并发控制
什么是 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,多版本并发控制相关推荐
- MVCC 机制的原理及实现
什么是 MVCC MVCC (Multiversion Concurrency Control) 中文全程叫多版本并发控制,是现代数据库(包括 MySQL.Oracle.PostgreSQL 等)引擎 ...
- [Database] 关系型数据库中的MVCC是什么?怎么理解?原理是什么?MySQL是如何实现的?
文章目录 前言 并发控制 并发控制的实现与锁的本质 MVCC是什么? MVCC的多版本(Multi-Version)指的是什么? MVCC的实现方式? MySQL的实现 PostgreSQL的实现 结 ...
- MySQL原理--隔离级别的实现方式--MVCC
原文网址:MySQL原理--隔离级别的实现方式--MVCC_IT利刃出鞘的博客-CSDN博客 简介 本文介绍MySQL的隔离级别的实现方式--MVCC. 这也是Java后端面试题中常见的一个问题. M ...
- 【MySQL进阶】MySQL事务隔离与锁机制底层原理万字总结(建议收藏!!)
[MySQL进阶]MySQL事务隔离与锁机制底层原理万字总结(建议收藏!!) 参考资料: 美团技术团队:Innodb中事务隔离级别和锁的关系 数据库的锁,到底锁的是什么? 阿里面试:说说一致性读实现原 ...
- Mysql锁机制及原理简析
Mysql锁机制及原理简析 一.前言 1.什么是锁? 锁是计算机协调多个进程或线程并发访问某一资源的机制. 锁保证数据并发访问的一致性.有效性: 锁冲突也是影响数据库并发访问性能的一个重要因素. 锁是 ...
- Mysql事务回滚机制与原理
Mysql事务回滚机制与原理 文章目录 Mysql事务回滚机制与原理 一.事务回滚机制 二.使用到的技术讨论 三.redo log和undo log介绍 3.1 redo log 3.2 undo l ...
- Java序列化的机制和原理
有关Java对象的序列化和反序列化也算是Java基础的一部分,下面对Java序列化的机制和原理进行一些介绍. Java序列化算法透析 Serialization(序列化)是一种将对象以一连串的字节描述 ...
- Redis数据持久化机制AOF原理分析一---转
http://blog.csdn.net/acceptedxukai/article/details/18136903 http://blog.csdn.net/acceptedxukai/artic ...
- java序列化算法透析_Java序列化机制与原理的深入分析
Java序列化算法透析 Serialization(序列化)是一种将对象以一连串的字节描述的过程:反序列化deserialization是一种将这些字节重建成一个对象的过程.Java序列化API提供一 ...
- 干货 | 彻底弄懂 HTTP 缓存机制及原理
转载自 干货 | 彻底弄懂 HTTP 缓存机制及原理 前言 Http 缓存机制作为 web 性能优化的重要手段,对于从事 Web 开发的同学们来说,应该是知识体系库中的一个基础环节,同时对于有志成为 ...
最新文章
- 淘宝2011.9.21校园招聘会笔试题+答案
- Android应用内多进程分析和研究
- Apache服务器主配置文件 httpd.conf 中文版
- 设计模式 (3) : 单例模式的几种方法
- LambdaMART简介——基于Ranklib源码(一 lambda计算)
- Session在类库中的使用
- 【tensorFlow】——图像数据增强、读取图像、保存图像
- OSI模型数据链路层为什么需要分层?
- 自动驾驶安全驾驶规则_自动驾驶知识科普 自动驾驶汽车的七大核心技术
- mssql 字增自段怎样重置(重新自增)|清空表已有数据
- 厦门大学计算机学硕复试,【图片】一战厦大计算机上岸,经验帖。慢更【考研吧】_百度贴吧...
- (转)基于MVC4+EasyUI的Web开发框架经验总结(12)--利用Jquery处理数据交互的几种方式...
- fun-函数的数据类型小结
- MySQL数据库regdate_第十五章 MySQL 数据库
- 超级强大服务器终端,告别 XShell 打造强大的Windows 终端
- 用java异或的方式去实现简单的视频加密
- 计算机与单片机串口程序,51单片机与电脑串口通信,并用数码管显示的两种方法...
- 惠普m180n故障码04_惠普m180n打印机驱动(解决m180n打印机连接问题)V1.0 免费版
- 笔记本html外接显示器,提升效率 笔记本外接显示器(Intel篇)
- 几何分布期望与方差推导