范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

关于MVCC,我之前写错了,这次我改好了

  关于MVCC的原理,在《我想进大厂》之mysql夺命连环13问写过一次,但是当时写的其实并不准确,这个理解可以应付面试,帮助快速理解,但是他的真正实现原理我想再次拿出来说一说。 简单理解版
  以下先引用我之前写过的那篇中的内容,可以快速理解,建议先简单看看。
  要说幻读,首先要了解MVCC,MVCC叫做多版本并发控制,实际上就是保存了数据在某个时间节点的快照。
  我们每行数据实际上隐藏了两列,创建时间版本号,过期(删除)时间版本号,每开始一个新的事务,版本号都会自动递增。
  还是拿上面的user表举例子,假设我们插入两条数据,他们实际上应该长这样。
  这时候假设小明去执行查询,此时current_version=3 select * from user where id<=3;
  同时,小红在这时候开启事务去修改id=1的记录,current_version=4 update user set name="张三三" where id=1;
  执行成功后的结果是这样的
  如果这时候还有小黑在删除id=2的数据,current_version=5,执行后结果是这样的。
  由于MVCC的原理是查找创建版本小于或等于当前事务版本,删除版本为空或者大于当前事务版本,小明的真实的查询应该是这样 select * from user where id<=3 and create_version<=3 and (delete_version>3 or delete_version is null);
  所以小明最后查询到的id=1的名字还是"张三",并且id=2的记录也能查询到。这样做是为了保证事务读取的数据是在事务开始前就已经存在的,要么是事务自己插入或者修改的。 真正原理
  事实上,上述的说法只是简化版的理解,真正的MVCC用于读已提交和可重复读级别的控制,主要通过undo log日志版本链和read view来实现。
  每条数据隐藏的两个字段也并不是创建时间版本号 和过期(删除)时间版本号 ,而是roll_pointer 和trx_id 。
  roll_pointer指向更新事务之前生成的undo log,undo log用于事务的回滚,保证事务的原子性。
  trx_id就是最近一次更新数据的事务ID。
  以上述例子来举例,最初插入两条数据,真实的情况是这样,因为第一次插入数据没有undo log,所以roll_pointer指向一个空的undo log。
  这时候假设小明去执行查询,就会开启一个read view,read view包含几个重要的东西。 m_ids,就是还未提交的事务id集合low_limit_id,m_ids里最小的值up_limit_id,下一次生成事务ID最大值creator_trx_id,创建read view的事务ID,也就是自己的事务ID
  小明来执行查询了,当前事务ID=3 select * from user where id<=3;
  小红在这时候开启事务去修改id=1的记录,事务ID=4 update user set name="张三三" where id=1;
  这时候小明的read view是这样。 m_ids=[3,4]
  low_limit_id=3
  up_limit_id=5
  creator_trx_id=3
  所以,小明在执行查询的时候,会去判断当前这条数据的trx_id
  这时候,小红的修改也完成了,小红数据于是就变成了这样。
  如果小明再次去查询的话,就会发现现在的trx_id>read view的low_limit_id,也就是4>3,不符合条件,同时发现现在的trx_id=4在low_limit_id和up_limit_id [3,5]之间,并且trx_id=4在m_ids=[3,4]之中,所以就会根据roll_pointer指向的undo log去查找,trx_id=1小于现在的low_limit_id=3,符合条件,就找到了上一个版本name=张三的记录。
  如果这时候小明自己去修改这条记录的值,把名字改成张五,结果就是这样。
  然后小明去查询的话,就会发现当前的trx_id=3就是自己的creator_trx_id,就是自己,那么就直接返回这条数据。
  所以,我们可以先总结下几种情况: 如果trx_idlow_limit,trx_id还在[low_limit_id,up_limit_id]范围之内,并且trx_id在m_ids中,就会根据roll_pointer去查找undo log日志链,找到之前版本的数据,对应的就是小红修改后小明再次查询的场景如果trx_id=creator_trx_id,那么说明就是自己修改的,直接返回就好了,对应的就是小明自己去修改数据的场景不同隔离级别的实现
  根据上面阐述的原理,你可能发现了,这是可重复读下的实现啊,保证每次读取到的数据都是一致的。
  那么,如果是读已提交级别下,这个是怎么实现的?
  其实很简单,在上面的原理解释中,我都是假设每次查询的时候生成了read view,后续并没有重新生成。
  而读已提交级别下,则是每次查询都会生成一次read view。
  以上述小红修改过张三后的场景来举例。
  在可重复度级别下,由于trx_id>low_limit,trx_id还在[low_limit_id,up_limit_id]范围之内,并且trx_id在m_ids中,满足我们上述的条件2,所以就会根据roll_pointer找到之前的版本记录,保证可重复读。
  而在读已提交的级别下,重新生成了read view,这时候trx_id不在m_ids之中,说明事务已经提交,所以可以直接返回这条数据,所以查到的数据就是小红修改后的name=张三三 的数据了。 总结
  我是艾小仙,我承认我浪了,我之前居然还想浪,我以为年没过几天,结果发现最近一次技术文更新是在2月2号。
  我哭,所以,我肝了3个小时,痛定思痛,结束了我的短暂的王者生涯。
  大家觉得还行的话,点个在看,设个星标可好?
  我要回到正常更新的频率中来。
  - END -

史上最惨谍战剧前行者,已近结局却未出评分,网友却夸封神了今晚,应该算是前行者的大结局前夜了吧,类似于我们过年时的除夕,本来嘛,一部谍战剧不管怎么样,在播出过半的时候,差不多豆瓣分数也就出来了,但是这部剧却是意外,明晚就大结局了,今晚的分女人被男性撩拨时,心里多半会这样想,分析得太透彻了每个女人心中都有对爱情的美好憧憬,比如和命中注定的那个人来一场浪漫的邂逅,或是在某一个场合遇见,他对自己一见钟情,会主动过来搭讪,向自己表达爱意。这些都是女人对于爱情最美好的幻想,搞定你喜欢的女人,坚持做这几件事,冰川都能融化在爱情的世界里,舍得是一种大智慧,尤其是在追求女人这件事上,但你坚持舍去一些东西,才能够从女人身上得到一些东西,尤其是她对你深沉的爱,这时候你自然就已经搞定了女人,融化了她的心。承离婚后嫁小自己十岁的秦昊,50多岁依然是小公主2008年10月,一张伊能静与黄维德牵手的照片被媒体爆出,两人迅速占据了娱乐八卦的头版头条。此事件的影响,加上伊能静和庾澄庆聚少离多以及多年的婆媳不和等问题,2009年3月2日,伊主子随便一个小赏,竟毁了一个女人的一生电视剧大宅门是郭宝昌导演根据自己从小的经历以及在周围人口中听到的故事编著的。这是一部封建历史的背景下,具有鲜明的时代意义,且有相当深度的优秀作品。剧中很多小细节故事刻画的很生动,暴出道37年的老戏骨,离婚后拍戏也要带着儿子,62岁娶初恋老来得女媒体人周刊出道37年的老戏骨,离婚后拍戏也要带着儿子,62岁娶初恋老来得女这次我们要说的这位老戏骨,本身是一位非常优秀的演员,可是早年就离婚自己带着重病儿子生活,一直到自己晚年的时少妇女人喜欢上你后,会有这些迹象,别不懂会开始打扮自己前段时间三十而已里的王漫妮,频频上热搜。已经年过三十的她,独自在大城市打拼,可看起来孤傲清冷的她,内心也总是渴望一段真挚的爱情。于是在梁正贤对她表露爱意的时候,王漫妮如果女人想约你,男人一定要知道,和你说的这几句话几乎所有的事情都可以通过微信这个平台来解决,它的确给我们带来了诸多便利。特别是涉及到感情方面的问题时,当面一些难以开口的话题也可以在微信上讲出来,当一个女人相约你的时候,也往往会在喜欢一个人,直接表白多没意思,试试这些情话,撩到她倒追你也许你就像你自己说的那样,有虚荣心,以自我为中心,不忠实,然而,它们和你的其他品格相比,是微不足道的2。但愿每个夜晚睡前热的牛奶每个清晨醒来的早安吻和许多年后黄昏公园里我身边的那个相互喜欢的两个人,有这些默契,别再傻傻错过爱我喜欢你,你刚好也喜欢我,两情相悦的爱情多么让人羡慕,但是能抓住机会在一起的人,却是少之又少,往往是由于害怕不勇敢而造成的,因为不能确定对方是不是喜欢自己,所以不敢贸然表白,那怎样一个为国争光的小姑娘,就因为喜欢收藏鞋就要这么对她,太过分最近,东京奥运会上连夺两金的杨倩争议不断。从一开始夺得奥运首金到后来团体决赛又得一金,成为东京奥运会首得两金的选手。可谓是为国争了足够的光,国民都为她点个大大的赞。后又爆出杨倩还是
婚姻这张纸重不重要?相当重要jungholee婚姻这张纸重不重要?相当重要。广东深圳最近判了个案子。一对夫妻,关系不好,1981年就感情破裂然后分居了,一直没离婚。2001年,也就是分居近20年,男的找了个保总有一些傻缺,让人目瞪口呆DavideBonazzi我在网上看到好几件事情,都觉得不大像真的。一件是高铁上,一排三个位置,一男子坐在中间座位,小桌板也放下来了,拒绝给靠窗的女乘客让行入座。女的问,我怎么进去借给公婆的钱,就当P2P亏了吧DavideBonazzi给我写信,发送至574479702qq。com,800字以内,所有来信默认为可以公开。不希望在公众号公开,请至微博问答。读者来信鲁瑾老师你好!我和我老公结教你做一款巨简单又好吃的烤猪排,和一款黄油小饼干MirenAsiainLora今天星期几?一下子答不上来吧哈哈哈哈。每当处于浑浑噩噩的长假,这就是一个送命题。这个长假高速上又堵起来了,有人堵到钓鱼有人把回家的月饼吃完了还有人拿出上海名媛群真正的你,谁也不知道ChloeSmart前天,有关上海名媛群的事上了热搜。文章的作者是花了500元的巨款,深入所谓的上海顶级名媛群,为普通人探究生活在云端的一撮人,每天都在过着怎么样的生活,结果却让人苹果12,环保是真,抠门也是真DavideBonazzi苹果出iPhone12了,最便宜的5000多,最贵的11000多。苹果比较强调环保,这次把充电头和耳机给环保没了,数据线还有的。他们说,人家不是为了省钱啦我怎么看伊能静的妈味DavideBonazzi昨天的文章讲到交通台主持人菲菲采访我的几个问题,其实上半段的采访中还有一个问题,就是她问我怎么看人们评价伊能静的妈味。妈味是随着爹味出来的,都不是啥好词。贫困山区女高校长反对当全职太太,让捐钱的昔日女生滚出去DavideBonazzi凤凰卫视的记者胡玲昨天发了一个微博,说,张桂梅校长的学生因为当全职太太,张校长不接受她的捐款,并且要她滚出去女人要靠自己,不能就靠男人你同意吗视频加载中张女主持采访女主持靠近就会有情,我不想有情DavideBonazzi交通台的菲菲是个特别的姑娘,在大家都被要求并努力进入小视频时代的时候,她坚持做她的播客,就是没画面的那种。不是因为颜值不自信,而是她觉得喜欢做播客。和一些恋爱新风险被控强奸DavideBonazzi前天网上曝出来一件事,华南理工大学教授王雨磊疑似强奸女学生。现场视频和录音中,一名女生哭喊到帮我伸张正义,他强奸了很多人。当天晚上,华南理工大学新闻中心发紫金矿业老板的高调婚礼DavideBonazz有读者让我写写这件事,让我写写新娘说的相信爱情这件事。八卦程度略浅的同学先来看一段视频,这是身家300亿的63岁的紫金矿业董事长陈景河和新婚太太,38岁钱冰