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

一文带你看通透,MySQL事务ACID四大特性实现原理

  #头条创作挑战赛#
  hello,大家好,我是张张,「架构精进之路」公号作者。
  说起MySQL事务处理的四大特性,相信大家都可以张口就来:ACID!
  那 MySQL是如何实现ACID的?每种特性的原理又是如何实现的?
  今天,本文笔者主要探讨MYSQL InnoDB引擎下的ACID实现原理,对事务、锁以及隔离级别等内容统一进行回顾一下。
  1、ACID特性原子性(Atomicity)
  单个事务,为一个不可分割的最小工作单元,整个事务中的所有操作要么全部commit成功,要么全部失败rollback,对于一个事务来说,不可能只执行其中的一部分SQL操作,这就是事务的原子性。 一致性(Consistency)
  数据库总是从一个一致性的状态转换到另外一个一致性的状态。在前面的例子中, 一致性确保了,即使在执行第三、四条语句之间时系统崩溃,信用卡账户也不会损 失100块,因为事务最终没有提交,所以事务中所做的修改也不会保存到数据库中,保证数据一致性。 隔离性(Isolation)
  通常来说,一个事务所做的修改在最终提交以前,对其他事务是不可见(隔离)的。避免多个事务并发执行的时候不会互相干扰。 持久性(Durability)
  一旦事务提交,则其所做的修改就会永久保存到数据库中,之后的其他操作或故障都不会对事务的结果产生影响。
  2、ACID 具体实现原子性:通过undolog来实现。 持久性:通过 binlog、redolog 来实现。 隔离性:通过(读写锁+MVCC)来实现。 一致性:MySQL通过原子性、持久性、隔离性最终实现数据一致性。
  对MySQL来说,逻辑备份日志(binlog)、重做日志(redolog)、回滚日志(undolog)、锁技术 + MVCC就是MySQL实现事务的基础。 2.1 原子性原理
  事务通常是以BEGIN TRANSACTION 开始,以 COMMIT 或 ROLLBACK 结束。 COMMIT 表示提交,即提交事务的所有操作并持久化到数据库中。 ROLLBACK表示回滚,即在事务中运行的过程中发生了某种故障,事务不能继续执行,系统将事务中对数据库所有已完成的操作全部撤销,回滚到事务开始时的状态,这里的操作指对数据库的更新操作(查询操作忽略)。这时候需要用到 undolog 来进行回滚。
  undolog:
  每条数据变更(INSERT/UPDATE/DELETE/REPLACE)等操作都会生成一条undolog记录,在SQL执行前先于数据持久化到磁盘。 insert语句,回滚时会执行 delete;
  delete语句,回滚时会执行insert;
  update语句,回滚时便执行相反的update,把数据改回来。
  当事务需要回滚时,MySQL会根据回滚日志对事务中已执行的SQL做逆向操作,比如 DELETE 一行数据的逆向操作就是再把这行数据 INSERT回去,其他操作同理。
  undolog记录事务开始前老版本数据,用于实现回滚,保证原子性,实现MVCC,会将数据修改前的旧版本保存在undolog,然后行记录有个隐藏字段回滚指针指向老版本。 2.2 持久性原理
  我们知道,MySQL表数据是持久化到磁盘中的,但如果所有操作都去操作磁盘,等并发上来了,那处理效率无法保证,因此引入了缓冲池(Buffer Pool)的概念,Buffer Pool 中包含了磁盘中部分数据页的映射,可以当做缓存来用;这样当修改表数据时,我们把操作记录先写到Buffer Pool中,并标记事务已完成,等MySQL空闲时,再把更新操作持久化到磁盘里,从而大大缓解了MySQL并发压力。
  MYSQL的持久性便是由redo log来保证。
  redo log
  是一种物理日志, 作用:会记录事务开启后对数据做的修改,crash-safe。 它类似于一个卸货的小推车,我们若是每卸一件物品就拿着去入库,那岂不是特浪费时间,若有一个小推车,我们将货物首先存放在小推车,当推车满了再往库里存,可以大大提升效率。
  其实就是MySQL里经常说到的WAL技术,WAL的全称是 Write-Ahead Logging ,它的关键点就是先写日志,再写磁盘,也就是先装小推车,等不忙的时候再装库。
  特性:空间一定,写完后会循环写  ,有两个指针write pos指向当前记录位置,checkpoint指向将擦除的位置,redolog相当于是个取货小车,货物太多时来不及一件一件入库太慢了这样,就先将货物放入小车,等到货物不多或则小车满了或则店里空闲时再将小车货物送到库房。用于crash-safe  ,数据库异常断电等情况可用redo log恢复。
  以下只作了解:
  写入流程:先写redo log buffer,然后wite到文件系统的page cache,此时并没有持久化,然后fsync持久化到磁盘
  写入策略:根据innodb_flush_log_at_trx_commit参数控制(innodb以事务的什么提交方式刷新日志) 0——>事务提交时只把redo log留在redo log buffer
  1——>将redo log直接持久化到磁盘(所以有个双"1"配置,后面会讲)
  2——>只是把redo log写到page cache
  2.3 隔离性原理
  MYSQL有四种隔离级别,用来解决存在的并发问题:脏读、幻读、不可重复读。
  那么不同隔离级别,隔离性是怎样实现的呢?
  一句话:锁+MVCC。
  锁表锁:读锁(不会阻塞其他线程的读操作,阻塞写操作);写锁(读写操作都阻塞) 行锁:需要的时候加上,并不是马上释放,等事务提交才释放,两阶段锁协议 锁的类型
  间隙锁-gap lock :锁定区间范围,防止幻读,左开右开,只在可重复读隔离级别下生效—|—为了阻止多个事务将记录插入到同一范围内,而这会导致幻读问题的产生
  记录锁-record Lock :锁定行记录,索的索引,索引失效,为表锁
  临键锁-next-key Lock :record lock+gap lock 左开右闭 (解决幻读 )  锁的模式
  select .... for update (持有写锁,别的不可加读锁,也不可加写锁)
  select .... lock in share mode(持有读锁,别的可以再加读锁,不可加写锁)
  共享锁-读锁-S锁
  排他锁-写锁-X锁
  意向锁:读意向锁+写意向锁
  自增锁  全局锁:全库逻辑备份 死锁:两个或多个事务在同一资源上相互占用,并请求加锁时,造成相互等待,无限阻塞
  MVCC:实现多版本并发控制,实现原理:使用版本链+Read View
  读已提交和可重复读实现原理就是MVCC Read View不同的生成时机。可重复读只在事务开始时生成一个Read View,之后都用的这个;读已提交每次执行前都会生成Read View。
  2.4 一致性原理
  一致性是事务追求的最终目标,前文所述的原子性、持久性和隔离性,其实都是为了保证数据库状态的一致性,数据库中的增删改操作,使数据库不断从一个一致性的状态转移到另一个一致性的状态。
  总结
  事务该回滚的回滚,该提交的提交,提交后该持久化磁盘的持久化磁盘,该写缓冲池的写缓冲池+写日志。
  对于数据可见性,通过四种隔离级别进行控制,使得库表中的有效数据范围可控,保证业务数据的正确性的前提下,进而提高并发程度,支撑服务高QPS的稳定运行,保证数据的一致性,这就是咱们说个不停的MySQL数据库事务ACID四大特性。
  希望今天的讲解对大家有所帮助,谢谢!
  Thanks for reading!
  作者:架构精进之路,十年研发风雨路,大厂架构师,CSDN 博客专家,专注架构技术沉淀学习及分享,职业与认知升级,坚持分享接地气儿的干货文章,期待与你一起成长。
  关注并私信我回复"01",送你一份程序员成长进阶大礼包,欢迎勾搭。

莫卧儿帝国和成吉思汗有着什么关系莫卧儿帝国和成吉思汗之间有着密切的前世今生关系,这可以从两个方面来看。莫卧儿首先,成吉思汗是莫卧儿帝国的创建者,他曾经率领蒙古军队征服了印度次大陆的大部分地区,建立了一个庞大的帝国那一年,湖南省民主妇联成立!湘妹子有了温暖娘家1953年,湖南省民主妇联正式成立2023年,湖南省妇联成立70周年。为全面展现党领导下的湖南妇女工作取得的辉煌成就,回顾湖南妇联组织发展的光辉岁月,激励新时代妇联人不忘初心牢记使在宋代,武将经商普遍存在,那么宋代武将经商有何特点?唐末五代时期,藩镇势力拥兵自重,军阀为了增强自身的建设,普遍开展经商以扩大财源。在有关宋代官员经商的历史记载中可以发现,宋代官僚集团,在参与商业经营活动时有诸多共性呈现,将宋代官僚这是一张让国人泪目和敬佩的烈士遗照1949年前后,按照中共中央关于解放台湾的决策部署,解放军先后秘密派遣了1500名地下工作者潜伏台湾。惊涛拍孤岛,碧波映天晓。虎穴藏忠魂,曙光迎来早。1950年6月,由于蔡孝乾的叛中东为什么这么乱(1)文明诞生之初的王朝更替诸国混战15世纪中叶开启的大航海时代,欧洲各国凭借自身军事实力的优势,在全球各地建立殖民地。到18世纪中后期,西方资产阶级开始为自己主宰世界制造合法性说辞,最终在19世纪形成了一种在人文科宋代地方政权的演变和制度创新地方豪强和地方势力的崛起前言宋代地方政权的演变和制度创新是中国封建社会政治制度的演进和发展中的一个重要方面。随着宋代中央政权的逐渐强大,地方政权的地位也开始得到提高,并经历了一系列的演变和变革。在这一过程东山湖由义务建设而成东山湖内九曲桥旁,木棉花盛放。文广州日报全媒体记者何钻莹苏赞通讯员敖继龙图广州日报全媒体记者苏俊杰实习生谢一言东山湖3月是广州市学雷锋志愿服务月,在这座志愿之城,志愿服务蔚然成风。宋神宗改革的举措和意义研究从政治,军事,生产角度图文书山里的墨客编辑书山里的墨客引言宋神宗是中国历史上著名的皇帝之一,他的统治时期被称为神宗之治。在他的统治期间,他进行了一系列的政治经济军事等方面的变革,被后人称为神宗改革。神宗他是傅全有曾经的黄金搭档,曾任兰州军区政委,64岁晋升上将军衔1990年,傅全有奉命前往兰州,他在兰州军区从政了两年,在这两年时间里和他一同搭档的便是曹芃生。傅全有被任命为兰州区局总司令的时候,中央同时任命曹芃生为兰州军区政委。两人成了黄金搭妈妈减肥大作战10种代谢低的表现,难怪你瘦不下来!好羡慕那些吃不胖的人!为什么我喝水都长肉?有没有跟我一样的姐妹?营养师告诉我,这种情况属于代谢低。科思妈妈总结了10种代谢低的表现,中了三条以上的,一定要关注我,趁着这个春天一起提隘门岭事件红十三军史上一大公案,500名死难红军67年后才平反1930年夏,中国工农红军第十三军第一团在平阳战斗后,该团第二大队中队长徐定魁和李启林李昌年等几支红军武装队伍撤回永嘉,在鹤盛东皋潘坑岭头鲤溪张溪石阵等地休整。1930年6月中旬,
为什么跟朱之文的贵人们在他火了以后不跟他来往呢?我觉得有两方面的原因,一朱之文忘恩负义,过河拆桥,自以为了不起,根本不把昔日恩师伯乐放在眼里。二是,根据自朱之文出道十多年来的所作所为,朱之文的恩师伯乐看透了朱之文的人品不怎么样,不喜欢身边的同事,又每天在一起相处,该怎么让自己快乐一点?谢谢邀请!我不清楚你说的具体情况,我帮你梳理一下1。你不喜欢身边的所有的同事或者几个同事,这种情况很可能是你自己的问题,也许你是一个眼睛里容不得沙子的人,见不得别人的小缺点,这种情你身边长期不上班的人,靠什么活着?我给大家讲个真实案例,我本人在去年用3个月赚了8万,没有技术含量,就是纯粹的摆摊,只不过有些技巧而已。其实当年纪大了,见识广了以后,你就会明白,上班只是增加收入的一种方式而已,增加你身边有没有真的买彩票中了大奖的人?他的生活发生了怎样的变化?谢邀我给你讲一个真实的故事,几年前我去彩票站购彩票,那时双色球20点结束和现在一样,当时彩票站站主即将关机的情况下相差几秒钟,机选一注,第二注,第三注,共计选了三注,然后就结束了,我国无人机技术水平有多先进?中国无人机彩虹5安装的斩首透视雷达足以傲视群雄雷达穿透墙壁以辨认和追踪建筑物内的目标,实现对建筑物或者掩体内目标实施探测,真正让敌人实现无地遁形,彻底改变目前无人机的作战方式透视雷肝癌一期怎么发现的?肝癌一期,这是早期肝癌,肿瘤只在肝内,而且很小,这种肝癌基本上不太可能会有什么症状。1期肝癌怎么发现的?基本上是主动筛检体检发现的,或者因为其他疾病做肝脏B超或CT或磁共振等检查时血脂高的人晚餐不能吃什么?谢谢邀请。高血脂的确已经成为了现阶段患病率很高的一种疾病,高血脂也被叫做高脂血症,是血液检查当中比价普通的一种血液异常问题,随着高血脂的发展,很容易威胁到心脑血管健康,从而就会导致为什么有的可转债被爆炒,而有的无人问津?没有无人问津的可转债,只有还未爆发的个债。为什么这么说呢?首先被爆炒的可转债,我们分析一下不外乎小盘老债,如同股票,坐庄都喜欢抛压小盘子轻的,况且可转债t0来去自由。新债不同新股,本人40岁,事业单位提拔当副科,我要上吗?很高兴回答你的问题。事业单位提拔为副科,意味着走上领导岗位,但是作为一个40岁的人来说,来到还是稍微晚点了。我的建议1。上不上的问题,我的建议是上。一方面,40岁了还能提拔为副科证对于孕37周的孕妈来说,什么时候准备待产包合适?该准备哪些实用的单品呢?对于孕37周的孕妈来说,随时都有可能生产了,虽然说预产期是按40周推算的,但是也有很多38周左右小宝宝就提前来报道了,所以不要再等什么时候了,就现在赶紧先把住院时和月子里所需要一些如果李靓蕾对王力宏指控完全属实,会比李云迪事件严重吗?作为艺人,出事最严重后果,无非是退圈,他再严重有陈冠希当年的事件历害吗?我等吃瓜群众,管好自已的一亩三分地即可。就整个事件对他们二人的影响来说,肯定对王力宏的影响更为严重,因为王力