首页 要闻娱乐军事情感奇闻搞笑社会体育游戏百科

innodb存储引擎 初探InnoDB存储引擎的架构设计

2022-02-17 23:56

前言

InnoDB组件结构:

缓冲池:缓冲池,用于缓存磁盘数据

重做日志缓冲区:记录缓冲池的操作,按照策略写入磁盘,防止宕机,但事务已经提交,数据丢失

撤销日志:修改缓冲池数据时,可以在事务未提交时回滚,将旧值写入撤销日志文件,方便回滚。此时缓冲池的数据与磁盘中的数据不一致,属于脏数据。

1.缓冲池

假设您现在有一个update语句:

updateuserssetname = ' lisi '其中id=1

需要更新到数据库,InnoDB会执行哪些操作?

首先InnoDB会判断缓冲池中是否存在id = 1的数据。如果它不存在,它将从磁盘加载到缓冲池中,并且它还将对此数据设置排他锁,以防止多个sql同时修改此数据。

2.撤消日志文件

假设id=1的原始值是name = '樟山',现在我们需要将其更新为name = 'lisi ',那么我们需要将name = '樟山'和id = 1的旧值写入撤销日志文件。

熟悉数据库的学生知道事务的概念。在事务提交之前,所有操作都可能回滚,也就是说,name = 'lisi '可以回滚到name = 'zhangsan ',所以在更新到撤销日志文件之前,先写下这些值。

3.更新缓冲池数据

写完撤消日志文件后,它开始更新内存中的数据。将id = 1的name = 'zhangsan '更新为name = 'lisi '。此时,内存中的数据已经更新,但磁盘上的数据没有变化。这时,出现不一致的脏数据。

这时可能会出现一个问题,如果事务提交完成,但是Mysql服务宕机,内存中的数据还没有写入磁盘,会不会造成数据丢失,导致sql执行数据不一致?

4.重做日志缓冲区

此时重做日志缓冲区只存在于内存中,无法实现MySQL宕机后的数据恢复。

5.如果不提交事务,停机后会影响数据库吗?

其实没关系。交易未提交,表示执行不成功。即使MySQL崩溃或宕机后,内存中缓冲池和重做日志缓冲区修改的数据也会丢失,不影响数据前后的一致性。如果事务提交失败,数据库中的数据将不会改变。

6.提交事务、重做日志配置策略

提交事务时,重做日志将根据策略实施将重做日志从重做日志缓冲区写入磁盘。策略由innoDB_flush_log_at_trx_commit配置。

innoDB_flush_log_at_trx_commit的参数为0,即使提交了事务,重做日志也不会写入磁盘。当MySQL宕机时,内存中的数据将会丢失。

innoDB_flush_log_at_trx_commit的参数为1。提交事务后,重做日志将从内存刷新到磁盘。只要事务成功提交,重做日志将不可避免地存在于磁盘中。

此时,即使缓冲池的数据没有刷进磁盘,也可以从重做日志中知道哪些数据被修改了。MySQL关闭并重启后,可以从重做日志中恢复修改后的数据。

innoDB_flush_log_at_trx_commit的参数是2。事务提交后,重做日志只保留在os缓存中,但没有刷到磁盘中,以防此时服务关闭。那么os缓存中的数据就会丢失,即使事务提交成功,也会造成数据丢失。

看完这些,我相信为了保证数据安全,参数1是最好的策略。

7.事务的最终提交

Binlog实际上是一个属于MySQL Server的日志文件,之所以在这里提出来,是因为它和重做日志关系密切。

1)大日志和重做日志的区别

重做日志:它记录具有部分物理属性的重做日志,如“哪个数据页的哪些记录被修改了”

Binlog:倾向于逻辑的日志,例如:“用户表中id=10的一行数据已经更新。更新后的值是多少?”

2)提交交易时同时写binlog

在执行更新的同时,innoDB始终与执行器交互,包括将数据加载到缓冲池、写入撤销日志文件、更新内存数据、写入重做日志和刷盘等。对binlog的写入也由执行器执行。

其中,步骤1、2、3和4用于执行更新语句,而步骤5和6用于提交事务。

3)日志刷取策略分析

sync_binlog参数控制binlog的刷牙策略

sync_ binlog的默认值为0。事务提交后,binlog日志将存储在os缓存中,在MySQL宕机后,os缓存中的数据将丢失

sync_binlog的值为1。提交事务后,binlog日志会直接刷到磁盘上。

4)基于binlog和重做日志提交事务

binlog写入磁盘后,binlog文件的位置和文件名将写入重做日志文件,并且提交标志将写入重做日志文件。

5)提交标记的意义是什么?

提交标记意味着保持重做日志和binlog日志一致。如果在步骤5或步骤6中,事务提交开始,MySQL关闭,重做日志中没有提交标记,则事务提交失败。

这意味着commint标志着交易最终提交成功。

8.缓冲池脏数据被刷入磁盘

后台IO线程会将脏数据随机刷入磁盘。

这时,考虑一下,如果MySQL在刷入磁盘之前就宕机了怎么办?此时,事务已经成功提交,重做日志中有一个提交标记。即使宕机,重启后数据也会根据重做日志文件更新到内存中,等待IO线程刷盘。

9.摘要

通过update语句分析后,我们知道InnoDB存储引擎包含缓冲池、重做日志缓冲区等缓存数据,撤销、reod日志等日志文件,以及MySQL Server日志文件。

执行update语句时,会修改缓冲池、写撤销日志文件、写重做日志缓冲区等操作;提交事务时,刷重做日志和binlog,写binlog文件的名称和位置,写提交标记。最后,我会等待IO线程随机刷缓冲池的脏数据。

相关阅读
星跳水立方周韦彤性感勇敢 宅男女神上演湿身大戏(图)(19)
弦子,女星10米首跳——作为第一个出场的选手,天籁女声弦子开跳就让同场选手坐立难安,她直接走上了10米台,并选择背对水池,难度上再升一级,几乎没有瑕疵的完美落水后,让弦子成为了所有跳水节目中女星10米台第一人。周韦彤,背水一战——在第一轮中,时尚女王周韦彤表现不佳,在进入PK环节后,为求最后一搏完美晋级,她一路直冲10米台,完成了对自己“内心的征服”。孙佳奇——影视新星孙佳奇自嘲:在所有的人当中,18在看 07-07
王小东一虎一席谈 《一虎一席谈》辩论“孔庆东言论事件”现场实录
整理者按:2月2日晚上七点左右,参加了凤凰卫视《一虎一席谈》节目录制。讨论北大教授孔庆东近日评论被某些无良媒体刻意歪曲之后引发两岸三地巨大争议的事件,请到的几位重量级嘉宾有:【支持方】韩德强、王小东、郭松民,【反对方】张鸣、侯冠群(台湾)。当然,后来还请来了一位闹了笑话的所谓的"儒学大家"、孔子第73代外孙金池。在一个多小时的录制过程中,现场气氛时而轻松时而紧张,讨论时而张弛有度时而剑拔弩张(张鸣18在看 07-07
闫凤娇痔疮照片无遮挡 闫凤娇痔疮照片严重会导致肛裂!
闫凤娇本来只是一个参加非诚勿扰的女嘉宾,但现在社会有谁不懂?要想火就要脱!随着其艳照一出,大有谁与争锋的感觉!闫凤娇本身也是嫩模出身,现在的嫩模谁没个几百G的照片库,可能都不能称自己为嫩模!随着其艳照的曝光,居然有细心的观众看出了她长了痔疮!小编不得不说这就是这些观众的不对了,凭着别的地方不看,你咋老盯着人家那么点点地方看?节操何在,感觉不会再爱了!人家本着娱乐大众的心态,爆出艳照你也就抱着娱乐大53在看 07-07
【哈文年龄身高个人简历背景后台】 曝哈文升官 首次出任cctv3节目部主任
核心内容:哈文(Ha Wen),是著名主持人李咏的妻子。1969年4月13日出生于宁夏回族自治区青铜峡市。1991年中国传媒大学播音系本科毕业,1995年中国传媒大学电视节目制作系双学位,1996年《一个人和一条法规》获“中国新闻奖”。2003年10月任《非常6+1》栏目制片人,2012年央视春节联欢晚会担任总导演。2013年,哈文任中央电视台综艺频道(CCTV3)节目部主任。2015年中央电视台16在看 07-07
周新萍简历 聂磊老婆周新萍真实照片 聂磊老婆周新萍个人简历家庭工
聂磊妻子(wife )(wife)(wife )周新萍实在照片 聂磊妻子(wife )(wife)(wife )周新萍个人简历家庭事情background最新消息报导现状(recent developments) 虽然作为青岛黑社会权势(force)老迈(old)的聂磊已经受刑(be executed ),但是网上仍有传播(spread)这位黑老迈(old)的传奇经历。聂磊老婆,说到聂磊就不能不提25在看 07-07

热文排行