MySQL的MVCC机制实现READ COMMITTED和 REPEATABLE READ隔离级别

14 篇文章 0 订阅
订阅专栏

MVCC实现依赖于 —— undo日志、隐藏字段、ReadView

MVCC,多版本的并发控制,Multi-Version Concurrency Control

undo日志:

例子:表中本来有记录(1,张三,一班)

 事务10更新记录:(1,李四,一班)后又更新(1,王五,一班)

事务20更新记录:(1,钱七,一班)又更新(1,宋八,一班)

此时记录修改了四次,undo日志形成版本链:

隐藏字段:

 每行记录后面保存两个隐藏的列:一个保存了行的事务ID(TRX_ID),一个保存了行的回滚指针(ROLL_POINTER)

 ReadView:

RU(READ UNCOMMITTED) 不处理,所有事务直接读取数据库的最新值即可。SERIALIZABLE 隔离级别对所有操作加锁

 RC(READ COMMITTED) 和 RR(REPEATABLE READ) 隔离级别的实现是通过版本控制来完成。两种隔离界别下的核心处理逻辑就是通过ReadView判断所有版本中哪个版本是当前事务可见的处理。

ReadView中主要包含当前系统中还有哪些活跃的读写事务,把它们的事务id放到一个列表中,我们把这个列表命名为为m_ids

  • 使用READ COMMITTED隔离级别的事务在每次查询开始时都会生成一个独立的 ReadView。
  • REPEATABLE READ 隔离级别的事务在第一次读取数据时生成一个ReadView。

例子:

1、READ COMMITTED隔离级别(解决脏读)

 2、REPEATABLE READ 隔离级别(解决不可重复读)

  2、REPEATABLE READ 隔离级别(解决幻读)

 

比较:RC,RR级别下的InnoDB快照读有什么不同?
读已提交(RC):RC隔离级别下,每个快照读都会生成并获取最新的Read View,每次都读取undo log中最近的版本,因此两次对同一字段的读可能读到不同的数据(不可重复读),但能保证每次都读到最新的数据。

可重复读(RR):在RR隔离级别下,则是同一个事务中的第一个快照读才会创建Read View, 之后的快照读获取的都是同一个Read View。每次都读取undo log指定的版本,这样保证不会产生幻读,但可能读不到最新的数据。

总结:(MVCC机制原理) 

MVCC机制的实现就是通过read-view机制与undo版本链比对机制,使得不同的事务会根据数据版本链对比规则读取同一条数据在版本链上的不同版本数据。MVCC使得数据库读不会对数据加锁,提高了数据库的并发处理能力。借助MVCC,数据库可以实现READ COMMITTED,REPEATABLE READ等隔离级别,用户可以查看当前数据的前一个或者前几个历史版本,保证了ACID中的I特性(隔离性)。

MySQL - Read Committed隔离级别是如何基于ReadView机制实现的?
yang的博客
04-10 71
这个时候事务A发起查询,发现当前这条数据的trx_id是70,也就是说数据ReadView的事务id范围之间,说明是他生成ReadView之前就有个活跃的事务,是这个事务修改了这条数据的值,但是此时这个事务B还没提交,所以ReadView的m_ids活跃事务列表里,是有[60,70]两个id的,所以此时根据ReadView的机制,此时事务A是无法查询到事务B修改的值B的。一个非常核心的要点在于,当你一个事务设置他处于RC隔离级别的时候,他是每次发起查询都重新生成一个ReadView。
浅析MySQL数据库在InnoDB存储引擎下的READ COMMITTED与REPEATABLE READ隔离级别以及不可重复读与幻读现象
Wenlong_L的博客
11-15 942
一、InnoDB存储引擎下的一致性非锁定读与一致性锁定读 MySQL在InnoDB引擎下对于READ COMMITTED与REPEATABLE READ这两个隔离级别均采用的是一致性非锁定读,即所谓的多版本并发控制协议(MVCC),这样增加了并发性能。这两种隔离级别下默认的读操作都是读快照,但是读取的快照版本不一样,对于READ COMMITTED读取的是最新的快照版本,所以一个事务对数据的修改...
MySQLRead Committed隔离级别是如何基于ReadView机制实现
OceanStar的博客
12-23 756
Read Committed隔离级别 && ReadView机制 Read Committed隔离级别,也叫做RC隔离级别。意思是说事务运行期间,只要别的事务修改数据还提交了,就可以读到人家修改的数据的。所以会发生不可重复读以及幻读的问题。 而所谓的ReadView机制,它是基于undo log版本链条实现的一套读视图机制。意思是: 你事务生成一个ReadView,然后如果是你事务更新的数据,自己是可以读到的;或者是在你生成ReadView之前提交的事务修改的值,也是可以读到的。 但是如
MySQL-事务隔离级别:READ UNCOMMITTED(未提交读)、READ COMMITTED(已提交读)、REPEATABLE READ(可重复读)、SERIALIZABLE(可串行化)
最新发布
小孔靠得住的博客
03-07 2971
1、事务隔离级别:READ UNCOMMITTED(未提交读)、READ COMMITTED(已提交读)、REPEATABLE READ(可重复读)、SERIALIZABLE(可串行化) 2、​ InnoDB存储引擎在MySQL数据库中负责处理事务和行级锁定。Next-Key Lock是InnoDB为实现REPEATABLE READ隔离级别而采用的一种锁定机制,它结合了Record Lock(记录锁)和Gap Lock(间隙锁),旨在解决幻读问题。
mysql面试关键知识点:undo log
u013905744的专栏
01-21 811
undo log基础 大家都知道,数据库的四个隔离级别。有一个情况大家也熟悉:即RCRR两种隔离级别下的不同可见性,即不可重复读问题。 不可重复读的含义是事务A多次读取同一数据,事务B在事务A多次读取的过程中,对数据做了更新并提交,导致事务A多次读取时数据不一致 在RC隔离级别下,伪代码 session1 start transaction; session2 start transact...
Read Committed隔离级别是如何基于ReadView机制实现的?
weixin_44583135的博客
03-22 382
RC隔离级别,实际上意思就是说事务运行期间,只要别的事务修改数据还提交了,就是可以读到人家修改的数据的,所以是会发生不可重复读的问题,包括幻读的问题,都会有的。 所谓的ReadView机制,是基于undo log版本链条实现的一套读视图机制,意思就是说事务生成一个ReadView,然后呢,如果是事务自己更新的数据,自己是可以读到的,或者是在生成ReadView之前提交的事务修改的值,也是可以读取到的。 但是如果生成ReadView的时候,就已经活跃的事务,在生成ReadView之后修改了数据,接着提交了,此
关于Mysql隔离级别、锁与MVCC介绍
09-09
总结来说,MySQL通过隔离级别、锁和MVCC这三大机制实现了在高并发环境下的数据一致性、可靠性和并发性能。理解这些机制的原理和相互关系,有助于在实际应用中做出合适的配置选择,提升数据库的性能和稳定性。
MySQL-acid-mvcc以及=事物隔离级别
09-16
MySQL中有四种事务隔离级别Read UncommittedRead Committed、Repeatable Read 和 Serializable。其中Repeatable ReadMySQL的默认事务隔离级别。 最后, Durability保证事务提交后数据会持久的保存下来。 ...
MySQL的REPEATABLE READ事务隔离级别
shel447
02-12 373
一、标准SQL事务隔离级别有4种: 1、READ UNCOMMITTED:可读取其他事务未提交数据,可能会都到其他事务实际最后rollback、没有写到数据库数据,叫作脏数据; 2、READ COMMITTED:事务A内,不可以读取事务B已操作但未commit的数据,但可以读取事务C已commit的数据;这样会存在一个问题,在事务A内,对于同一条数据的两次查询之间如果事务B commit的对这
mysql mvcc与锁的关系_mysql四种隔离级别mvcc以及锁之间的关系
weixin_29745063的博客
01-27 1228
什么是事务的隔离级别隔离级别:理解隔离级别之前需要先了解事务的四个特性,分别是:A(Atomic):原子性是指数据库的事务是一个不可分割的工作单位,只有数据库事务都成功才算成功,任何一个SQL的失败,数据库状态都必须回退到事务开始前的状态C(Consistence):一致性是指事务将数据库的状态从一种状态转变为下一个一致的状态。在事务的开始和结束后,数据库的完整性约束都没有被破坏。I(Isolat...
Mysql REPEATABLE-READ 可重复读事务隔离级别 MVCC下的幻读问题验证
逆水行舟
08-12 1124
我们知道在RR可重复读事务隔离级别下,是存在幻读问题的。但是在网上看到有一种说法是在MysqlRR事务隔离级别下,mysql通过MVCC(多版本并发控制)解决了幻读问题的。所以就查了下资料,决定通过实践来验证一下这个问题。 实践是检验真理的唯一标准!这里先说结论:Mysql在可重复读事务隔离级别下,是存在幻读问题的。 验证过程: 先查看下当前数据库的事务隔离级别,确认为REPEATABLE-READ级别。 创建测试表 CREATE TABLE `test` ( `id`..
MVCC多版本并发控制
小白的博客
08-06 413
MVCC (Multiversion Concurrency Control),多版本并发控制。顾名思义,MVCC 是通过数据行的多个版本管理来实现数据库的并发控制。这项技术使得在InnoDB的事务隔离级别下执行一致性读操作有了保证。换言之,就是为了查询一些正在被另一个事务更新的行,并且可以看到它们被更新之前的值,这样在做查询的时候就不用等待另一个事务释放锁。...
mvcc机制中repeatableread的一些问题
Keson_wecanmakeit的博客
12-19 322
2个会话session,分别开启2个事务。 第一个select后等待,第二个会话事务insert了一条记录laoqi 测试,如果第一个会话事务这时候update的是id=1的数据,则下个select还是只是查的三四五六的数据,三的数据为更改后的数据。如果update的是他非repeatable的三四五六的新的qi的数据则下次select的是三四五六七。 原来我一直以为只要在事务内in...
55 Read Committed隔离级别是如何基于ReadView机制实现的?
limeOracle的博客
05-14 262
今天我们来给大家讲一下,基于之前我们说的ReadView机制是如何实现Read Committed隔离级别 的,那么当然了,首先就是要先做一些简单的回顾。 这个RC隔离级别,实际上意思就是说你事务运行期间,只要别的事务修改数据还提交了,你就是可以读 到人家修改的数据的,所以是会发生不可重复读的问题,包括幻读的问题,都会有的。 那么所谓的ReadView机制,之前我们讲过,他是基于undo log版本链条实现的一套读视图机制,他意 思就是说你事务生成一个ReadView,然后呢,如果是你事务自己更新的数据
数据库中事务的几种隔离级别分别解决了哪些问题
huotongwangbs的专栏
10-12 798
参考:数据库中事务的几种隔离级别分别解决了哪些问题-低调大师优秀的个人博客数据库中事务的几种隔离级别分别解决了哪些问题-2019马上就过去了,刚刚经历了双十一和双十二两大波活动。互联网看似已经平静下来了,其实不然,现在各大平台其实都在加紧分析我们的购买数据。想知道怎么分析数据吗?关注低调大师个人博客,这里有大量的资料分享。并且每天更新最新资讯。https://www.xujun.org/note-124761.html 一段废(huì)话(fà) 前面一直在写 JVM 系列的文章,直到有一天,卡壳了..
数据库事务四大特性、四大隔离级别以及解决的三种问题
guohg1234的博客
07-07 1290
一、数据库事务的四大特性:(ACID) 原子性( Atomicity ):指的是事务是一个不可分割的工作单位,要不全部成功,要不全部回滚 一致性( Consistensy ):事务在执行前后数据库处于一致性。(如:AB之间转账,A少100,B必须要增加100) 隔离性( Isolation ):多个用户并发访问数据库时,一个用户的事务不能被其他用户的事务所干扰,多个并发事务之间数据要相互隔离 持久性( Durability ):指一个事务一旦被提交,他对数据库的影响是永久性的。 二、数据库事务隔
浅析Innodb MVCC机制
TheLudlows的博客
10-01 1047
MVCC实现原理innodb MVCC主要是为Repeatable-Read事务隔离级别做的。在此隔离级别下,A、B客户端所示的数据相互隔离,互相更新不可见。innodb存储的最基本row中包含一些额外的存储信息 DATA_TRX_ID,DATA_ROLL_PTR,DB_ROW_ID,DELETE BIT 6字节的DATA_TRX_ID 标记了最新更新这条行记录的transaction id,每处理
多版本并发控制(MVCC)
小码农想做大架构的博客
04-25 260
Mysql多版本并发控制(MVCC)介绍
InnoDB---可重复读隔离级别的底层实现原理
chuixue24的博客
01-18 1240
可重复读的实现     Repeatable Read(可重复读):一个事务在执行过程中可以看到其他事务已经提交的新插入的记录(读已经提交的,其实是读早于本事务开始且已经提交的),但是不能看到其他事务对已有记录的更新(即晚于本事务开始的),并且,该事务不要求与其他事务是“可串行化”的。     这句话的核心,是“但是不能看到其他事务对已有记录的更新”,那么RR隔离级别是怎么保证这一点的呢? ...
MySQL事务隔离级别MVCC机制解析
3. **REPEATABLE READ(可重复读)**:这是MySQL的默认隔离级别,能防止脏读和不可重复读,但在某些情况下仍可能出现幻读,不过MySQL通过MVCC机制进行了优化。 4. **SERIALIZABLE(串行化)**:最严格的隔离级别,...
写文章

热门文章

  • Java中小数默认为double类型 5719
  • Java中的strip(), split() 分割字符串 5554
  • java中List<Integer>转化为int[]的方法 5370
  • MySQL数据库索引组合索引的最左优先原则 2415
  • MySQL的MVCC机制实现READ COMMITTED和 REPEATABLE READ隔离级别 1978

分类专栏

  • 日常问题记录 5篇
  • 数据库 14篇
  • JUC 9篇
  • 算法 2篇
  • JVM 5篇
  • java笔记 6篇
  • Linux 2篇
  • 学习路线

最新评论

  • java中List<Integer>转化为int[]的方法

    Demon_bh: 对,漏了 i++

  • MySQL的MVCC机制实现READ COMMITTED和 REPEATABLE READ隔离级别

    Bieber_L: 你说可重复读,保证不会产生幻读,这句话就错了。不要误人子弟

  • java中List<Integer>转化为int[]的方法

    Moon's words: 应该是一个for循环hh

  • MySQL的MVCC机制实现READ COMMITTED和 REPEATABLE READ隔离级别

    kongieg: 老哥从看的啥的教程,能推荐下吗,最近在看这块

  • java中List<Integer>转化为int[]的方法

    三只猪蹄: 遍历有问题呀

最新文章

  • JUC(8):AQS重点总结
  • JUC(7): ThreadLocal重点总结
  • JUC(6): Future异步任务重点总结
2022年27篇
2021年14篇

目录

目录

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家玻璃钢农民劳作雕塑革命主题玻璃钢雕塑量大从优金华玻璃钢广场雕塑厂家供应深圳商业街玻璃钢雕塑制作成都特色商场美陈聊城玻璃钢雕塑厂家威海步行街玻璃钢雕塑福州人物玻璃钢雕塑批发北京商场创意商业美陈费用玻璃钢女人雕塑玻璃钢香蕉雕塑生产鞍山售卖沈阳玻璃钢花盆岑溪玻璃钢座椅雕塑上海知名玻璃钢雕塑推荐厂家玻璃钢猫雕塑五华玻璃钢花盆花器美人鱼玻璃钢雕塑图片常德树箱玻璃钢雕塑制作江苏玻璃钢广场雕塑孙悟空玻璃钢雕塑福建蔬菜玻璃钢雕塑售价重庆抽象玻璃钢雕塑方法玻璃钢雕塑贵州地区的江门透明玻璃钢雕塑制作玻璃钢雕塑防腐的重要性郑州玻璃钢农耕人物雕塑温州玻璃钢花盆市场报价深圳联点玻璃钢雕塑厂德阳玻璃钢造型雕塑海口商场开业美陈香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化