InnoDB持久化策略以及过程详解(2)
InnoDB持久化策略以及过程详解
partial page write。mysql在恢复的过程中是检查页的checksum(页的校验和,见上文),发生partial page write问题时, Page已经损坏,找不到该页的checksum,就无法通过redolog恢复。
因此根据上述问题,InnoDB将buffer pool中的脏页刷盘时,会先通过memcpy函数将Page刷到double write buffer,再将数据拷贝到数据文件对应的位置。
double write buffer是物理磁盘上共享表空间中连续的128个页(每页16KB,大小共2MB, 每次写入1MB)。
- 如果写double write buffer失败,那么这些数据不会刷盘,InnoDB会载入磁盘原始数据和redo日志比较,并重新刷到double write buffer,然后再刷盘。
- 如果写double write buffer成功,但是刷盘失败(partial page write问题),那么InnoDB就不会通过事务日志来恢复了,而是直接用double write buffer中的数据刷盘。
redolog持久化过程
redolog包括两部分:一是内存中的日志缓冲(log buffer),该部分日志是易失性的;二是磁盘上的重做日志文件(redolog file,以ib_logfile0、ib_logfile1…命名),该部分日志是持久的。
redolog可以通过参数InnoDB_log_files_in_group配置成多个文件(最大100),另外一个参数InnoDB_log_file_size表示每个文件的大小,因此总的redolog大小为InnoDB_log_files_in_group * InnoDB_log_file_size。
上文讲到内存中log buffer是由多个redolog block组成的(日志块头占12B、日志块尾占4B),那么redolog file也是如此,每个redolog file的前4个block用于表示文件头,存储了一些管理信息,往后则存储log buffer中的block镜像。文件头主要存储了标记redolog file开始的LSN值(Log Sequence Number的简称)、标记redolog已刷盘的全局变量flushed_to_disk_lsn值、标记脏页已刷盘的全局变量checkpoint_lsn等。
- LSN:LSN记录了已经写入的redolog的日志量,是一个全局变量,初始值为8704。每次写入一个mtr时,LSN就会累加上mtr所占的空间字节数和相应的block头尾空间字节数。比如mtr_1产生的redolog为200B,那么LSN就变成了8704+12+200=8916,之后mtr_2又产生了1000B的redolog,那么LSN就变成了8916+296+4+512+12+208=9948。
- flushed_to_disk_lsn:系统第一次启动时,flushed_to_disk_lsn值和初始的LSN值是相同的,都是8704。随着系统的运行,redolog被不断写入log buffer,但是并不会立即刷盘,LSN的值就和flushed_to_disk_lsn的值拉开了差距,如果两者的值相同时,说明log buffer中的所有redolog都已经刷盘了。
- checkpoint_lsn:checkpoint_lsn的初始值也是8704,当flush链表中的脏页按顺序被刷盘时,mtr生成的对应redolog就可以被覆盖了,所以我们可以进行一个增加checkpoint_lsn的操作,我们把这个过程称之为做一次checkpoint。脏页是与redolog有关联的,记录了redolog的LSN信息,通过脏页可以找到对应的redolog,通过redolog也可以恢复对应的脏页。
相关阅读
-
OSPF中LSA主要的5种类型详解 OSPF的LSA类型有哪些
相对于大多数人OSPF中LSA主要的5种类型详解的IT小经验,接下来IT袋网小编就来介绍。 一台路由器中所有有效的LSA通告都被存放在它的链路状态数据库中,正确的LSA通告可以描述一个OSPF区域的网
-
lol无法连接服务器是什么原因 lol无限闪退重新连接的方法
小编为大家解答lol无法连接服务器是什么原因和lol无限闪退重新连接的方法的IT小经验,下面为详细的介绍。 用户运行lol游戏的时候会提示无法连接服务器的情况,今天为大家带来lol无法连接
-
html网页设计模板网站有哪些 html5网页前端设计步骤
本文核心内容:html网页设计模板网站有哪些和html5网页前端设计步骤方面的讲解,接下来IT袋带大家一起了解。 小型集合Mashup模板提供HTML/CSS、Sketch和NPM等免费模板。这个设计非常现代,绝对值
-
redis常见字符乱码问题及解决办法
小编为大家说一说redis常见字符乱码问题及解决办法的教程内容,接下来分享详细内容。 redis常见字符乱码问题及解决办法 问题 redis保存数据后出现\xac\xed\x00\x05t\x00 解决办法 创建一个配置类


