MVCC及其原理详解
什么叫mvcc
多版本并发控制,如果只有一个事务或者单线程对数据操作的时候。
在现在主流生产环境中不可能只有一个线程对数据库操作,这个时候就需要保障数据一致性。
那么在并发情况下有哪些应用场景呢?
1.读读
不存在任何问题,不需要任何锁的添加,不需要并发控制
2.写写
可能产生丢失跟新的可能性
3.读写
并发读写怎么保证?加锁,但是效率很低————mvcc,是为了解决并发情况下读写的数据问题
前置技能:
1.当前读:
读取的永远是数据库中记录的最新数据
哪些操作会造成当前读:
1.updata
2.insert
3.delete
4.select…for updata
5.select…lock in share mode
2.快照读:
读取的不是最新的数据,而是某个历史版本的数据
那些会引起快照读:存粹的select
快照问题:要是数据库100g那么我全部都要拍下来?
每一行数据上面可以有多个版本,每一个版本是谁修改他的哪一个事务修改他的这个transaction_id一一绑定的。
所以这个100g的快照不是对100g,不是复制粘贴形成快照,而是读取的是row trxI_ID,读取到的是当前事务最新的版本号。
因为transaction_id是顺序递增的,我们把已经提交的事务ID的最大值记成up_limit_id
我们开启事务后,我们读取数据,如果我记录下来后大于up_limit_id我们就不认!
什么意思,我来们来举个例子:
1到5按顺序来执行,这里Q1,Q2的值是多少?
为什么b是20不是19??
上面说了updata触发当前读,所以读得是最新的数据
我们继续一步一步分析:
假设数据库里面最后提交的版本号为999
第一步:
先是a开启了事务,再是b开启事务,再是c开启事务,并且都记录up_limit_id=999(最大值)
第二步
事务c修改了年龄
第三步
事务b修改,updata触发快照读,直接修改数据库层面的值,拿数据库里面最新的数据
拿到的是1002号,也就是事务c的版本号,接着在这个版本号上进行修改。结果就是
事务b再去读数据的时候,因为最新修改的1001号修改的,所以拿到的是1001,正好和自己匹配,要认了所以年龄是20岁
第四步:
a事务记录的最后版本是999。1001不符合继续往上找,1002还是不符合,读到999,符合了,返回。显示18。
MVCC及其原理详解相关推荐
- MySQL MVCC底层原理详解
1 简介 MVCC(Multi-Version Concurrency Control)多版本并发控制,是用来在数据库中控制并发的方法,实现对数据库的并发访问用的.在MySQL中,MV ...
- CRF(条件随机场)与Viterbi(维特比)算法原理详解
摘自:https://mp.weixin.qq.com/s/GXbFxlExDtjtQe-OPwfokA https://www.cnblogs.com/zhibei/p/9391014.html C ...
- LVS原理详解(3种工作方式8种调度算法)--老男孩
一.LVS原理详解(4种工作方式8种调度算法) 集群简介 集群就是一组独立的计算机,协同工作,对外提供服务.对客户端来说像是一台服务器提供服务. LVS在企业架构中的位置: 以上的架构只是众多企业里面 ...
- jQuery中getJSON跨域原理详解
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp28 jQuery中getJSON跨域原理详解 前几天我再开发一个叫 河蟹工 ...
- nginx配置文件及工作原理详解
nginx配置文件及工作原理详解 1 nginx配置文件的结构 2 nginx工作原理 1 nginx配置文件的结构 1)以下是nginx配置文件默认的主要内容: #user nobody; #配置用 ...
- EMD算法之Hilbert-Huang Transform原理详解和案例分析
目录 Hilbert-Huang Transform 希尔伯特-黄变换 Section I 人物简介 Section II Hilbert-Huang的应用领域 Section III Hilbert ...
- 图像质量损失函数SSIM Loss的原理详解和代码具体实现
本文转自微信公众号SIGAI 文章PDF见: http://www.tensorinfinity.com/paper_164.html http://www.360doc.com/content/19 ...
- 深入剖析Redis系列(三) - Redis集群模式搭建与原理详解
前言 在 Redis 3.0 之前,使用 哨兵(sentinel)机制来监控各个节点之间的状态.Redis Cluster 是 Redis 的 分布式解决方案,在 3.0 版本正式推出,有效地解决了 ...
- 【Android架构师java原理详解】二;反射原理及动态代理模式
前言: 本篇为Android架构师java原理专题二:反射原理及动态代理模式 大公司面试都要求我们有扎实的Java语言基础.而很多Android开发朋友这一块并不是很熟练,甚至半路初级底子很薄,这给我 ...
最新文章
- android 图片水印处理 文字倾斜处理
- shell 压测_【原】shell编写一个简单的jmeter自动化压测脚本
- LINUX CP 命令强制覆盖功能开启/关闭
- 【转】Linux系统编程---dup和dup2详解
- (十四)【RecSys 2016】Personalized Recommendations using Knowledge Graphs: A Probabilistic【看不懂】
- pillow支持python 2和python 3_python3读取图像并可视化的方法(PIL/Pillow、opencv/cv2)...
- Mycat高可用架构原理_Mycat集群搭建_HA高可用集群_高可用_单表存储千万级_海量存储_分表扩展---MyCat分布式数据库集群架构工作笔记0027
- 微信小程序支付返回信息为空
- Android 集成Unity项目
- selenium webdriver如何操作select下拉框
- Atitit.软件开发概念(11)--网络子系统--url编码 空格问题URLEncoder java js php
- 数学建模常用模型和算法介绍
- Chrome 中迅雷的插件(正确的下载地址)下载以及安装(一)
- 利用GeoLite2-City.mmdb开源库将IP转换成经纬度—java项目小Demo
- 国内外最顶级的8大plm项目管理系统
- 成功粉碎北信源监控程序vrvedp_m.exe ,vrvrf_c64.exe,svchost.exe,vrvrf_c.exe
- 如何使用荣耀手机的计算机功能,华为荣耀手机投屏电脑教程
- 统计假设检验之显著性检验(significance test)
- 压力传感器的制作材料
- 35岁前要培养的66种思维(中)
热门文章
- H5 语音合成播报功能
- SpringBoot+Vue实现前后端分离的小而学在线考试系统
- centos7查看进程ps_centos如何查看进程
- 2004年中国各省市自治区GDP排名
- 学生成绩管理系统mysql课程设计_学生成绩管理系统数据库课程设计报告.doc
- oracle 建分区索引_Oracle的分区表和Local索引创建与维护
- 设计和QQ一样动态登录界面
- matlab进行道格拉斯筛选,用MATLAB计算柯布道格拉斯函数,需要计算程序,急!谢谢大神...
- Packettracer--计算机网络实验
- UOS V20 SP1 升级到Update1 后WPS无法打开