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

关于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 -

锦鲤信小呆现状曝光,没钱没工作,告诫孩子天上不会掉馅饼成为锦鲤之后,信小呆做的第1件事情就是把工作辞了,然后去办理护照,准备出国旅行,环游世界。本以为自己的奖品真的价值一个亿,可实际拿到手后信小呆才明白,现实与想象是有差距的,大部分奖孩子为了不去幼儿园,使出了百般解数,哭诉我腰疼,走不动文小鱼奶爸日记原创,欢迎个人转发和分享不知不觉间,萌娃们开学已经有大半个月的时间了,虽然刚开学时的各种别扭不适应,闹得孩子和家长都很不愉快,但好在现在大部分孩子都已经适应了幼儿园生黄圣依晒出安迪作息表,和杨子产生分歧,孩子的兴趣班怎么报文小鱼奶爸日记原创,欢迎个人转发和分享不同于老一辈教育孩子的思维,现在的父母除了看重考试分数之外,对兴趣培养的投资也很舍得。但如何摒弃焦虑和随大流,给孩子选择正确且精简的兴趣班也是网友晒幼儿园缴费单,无奈感慨这是我生二胎最好的避孕药文小鱼奶爸日记原创,欢迎个人转发和分享小孩子,学名人类幼崽,因为没有赚钱能力,但又非常耗费钱财,因此也被称为四脚吞金兽和行走的碎钞机。现如今,面对长辈们的催生,年轻夫妻只用一句话养6年追踪3个不同阶层的孩子,揭露残酷现实父母就是孩子的出路文小鱼奶爸日记原创,欢迎个人转发和分享中国的应试教育一直被大家所诟病,但不得不承认,虽然弊端很多,却也真的是出身家庭条件一般孩子通往光明的捷径。从古至今,身边一个又一个活生生的例子镜头前消失197天后,马思纯首谈抑郁症原因父母给的压力太大文小鱼奶爸日记原创,欢迎个人转发和分享28岁的马思纯凭借七月与安生这部电影,与周冬雨获得了双金马影后的称号,这对她的演技无疑是最大的肯定。但2016年过去之后,她的角色塑造可以说是孩子嫌学习苦,开饭店的父亲做法太霸气,厌学情绪被扼杀在摇篮里文小鱼奶爸日记原创,欢迎个人转发和分享学习的过程对大多数学生来讲都是枯燥的,所以才有寒窗苦读这个词。但不经一番寒彻骨,哪得梅花扑鼻香?只有熬过了这寒这苦,才能迎接风雨之后的彩虹与甘小学生连线题太奇葩,看起来毫无关联,家长绞尽脑汁居然全错了文小鱼奶爸日记原创,欢迎个人转发和分享说实在话,现在让一个本科毕业的家长,去辅导小学生的题目,也不一定都会。小学知识在大家眼里就是基础的存在,谁都能教,但事实很打脸。现在很多扩展题我前面7只猴后面9只猴,一共几只猴?孩子答16被打叉文小鱼奶爸日记原创,欢迎个人转发和分享网上经常能看到网友分享的各种趣事,其中就有父母辅导孩子写作业的场景,正所谓不写作业母慈子孝,一写作业鸡飞狗跳。给孩子辅导作业是所有家长最痛苦的专业第一进入中戏,40亿票房女主赵今麦的笔记曝光确实是学霸文小鱼奶爸日记原创,欢迎个人转发和分享经常听说没有高考的童星拍完戏的中间休息场,会挤出时间来学习功课,其中大多功夫都不负有心人,不少人最后都考上了自己心仪的好学校。赵今麦就是其中一曾放话懒得考清华北大的16岁女孩,后来考哪了?证明了实力文小鱼奶爸日记原创,欢迎个人转发和分享国内高校中,数一数二的就是清华北大了,是千万莘莘学子梦寐以求的学府。大部分人小时候,应该都被问到过一个难以抉择的问题长大要考清华还是北大?就好
上线一周年!京东京喜加速推动中国员工福利智能管理新时代在人口红利消失市场竞争环境加剧和年轻一代迈向职场中坚的背景下,中国企业的人才管理正面临新一轮挑战。如何吸引和保留更多的优秀人才,成为每一个企业人才管理的核心命题。为此,2018年4高效率的团队怎么炼成?年底冲业绩神器团队目标PPT模板文章末尾有领取方式,按照以下步骤即可获取资源包当你想要别人出海,你不应该先教人造船,而是让他去渴望星辰大海的浩瀚。而在团队管理中,目标管理至关重要!怎么给员工更好地打鸡血呢?一份好996的熬夜工作,是怎么让你变成烂人的我要告诉你一个真相习惯加班的人,会越混越差。如果你在网上发帖提问职场上,你最讨厌的人是什么样的?肯定很多人说,最讨厌那种经常深夜发朋友圈写道今天也是加班到这个时候,又是最晚下班的一15万沉迷糊弄学的年轻人你女朋友和工作都要糊弄没啦01hr糊弄学在豆瓣小组横空出世后,如今俨然已经成为了当代人的生存法则。截止到今天为止,豆瓣糊弄学小组人数已经超过了15万人。不想聊天时用哈哈哈哈哈凑字数有人求砍价谎称刷单太多被封金三银四,500份个人简历PPT,让你找到好工作文章末尾有领取方式,按照以下步骤即可获取资源包金三银四的季节,很多小伙伴都想着跳槽,这里为大家准备了500份个人简历PPT模板,风格多样,随改随用,找工作的第一块敲门砖!部分预览图过完年后,我想找个富婆了用3个问题,找到你工作的动力假期结束,很多朋友从长达数十天的吃喝玩乐中,回到了工作岗位。我的朋友小何,在复工之后,深感人生无望,小到没有动力起床,工作效率低下,大到对人生感到迷茫,时时感觉自己是个铁废物。凌晨素颜拍片现鱼尾纹MaggieQ称赞披荆斩棘的哥哥太帅了现年42岁的MaggieQ进军荷里活后,发展不俗,最近主演的电影复仇杀姬在香港上映。一直留在美国发展的MaggieQ,也很留意内地综艺节目,近日在抖音拍片,拿着手机收看披荆斩棘的哥高海宁为演活角色,不惜剪短头发扎胸上阵,只是为了不怕变形高海宁(高Ling)27日现身将军澳电视城出席无线剧集七公主宣传造势活动。提到为要演活在剧中司机角色,不惜剪短头发扎胸上阵。高海宁表示刚开始导演都不用我剪这么短的,但拍了一天后,我曹格女儿不知不觉快将11岁,遗传妈妈的优良基因,拥有长直美腿曹格与太太吴速玲婚后育有一对子女Joe与Grace,曹格在2014年带上子女参加内地亲子真人秀爸爸去哪儿2,一家人气急升当年只有3岁的Grace脸圆圆配齐荫发型,要大家称呼她做姐姐因是非而无缘巾帼枭雄4?朱晨丽晒乐易玲亲密合照证关系不变今年是港姐冠军朱晨丽(朱朱Rebecca)入行10周年,但今天有报道指她是非,忽然踢出TVB重头剧巾帼枭雄4的拍摄,无缘出演视帝黎耀祥的妹妹与罗子溢有感情线的另一半则暂时悬空。朱晨光良51岁生日逆天颜值似30岁,网友大赞保养功夫做得好有大马情歌王子之称的光良出道多年,不少情歌都脍炙人口,30日是光良生日,不知不觉光良踏入50有1,从他在IG发布的最新照片中完全不像已经51岁,要说像一名踏入30多岁的男性也不为过