redo Log 的持久化过程

「这是我参与11月更文挑战的第18天,活动详情查看:2021最后一次更文挑战

redo Log 的刷盘规则:

在MySQL引擎中,redo log 是用来保证事务的原子性和持久性的特性

今天我们来具体看看,对于redo log中 如何进行将日志缓存 redo log Buffer 写入 redo log file 中,

一般情况下,对于通常的事务提交,分为三个阶段:

  • 事务准备提交:

  • 事务提交过程中:

  • 事务提交完成:

主要过程是,在事务提交时候, 会发生强制的将 redo log buffer的日志缓存的数据,强制写入 redo log file中, 通常会调用一次操作系统的fsync()的操作。

其中还会经过操作系统的内核空间, OS buffer ,因为MySQL的进行和日志缓存都工作在操作系统中环境下

本质:

事务提交的过程中,必须将日志缓存的数据持久化到磁盘的日志文件中,期间还需要经过操作系统的 “内核空间缓存区”--,也就是OS Buffer区域,

Redo log从用户空间的 Log buffer 写入磁盘的Redo Log文件时,

需要要内核空间的OS buffer;

日志文件,没有使用 O_DIRECT标识,如果有这个标识,就可以不经过这个os buffer的内核空间,直接写入磁盘数据,;

注意事项:

对于redo log 保持持久性是,必须要将日志缓存,写入磁盘,通常这个 redo buffer 会检测当前数据又多少,如果超过一半,才会触发 刷盘操作,也就是会进行持久化 写入磁盘数据的操作;

当时事务存在检查点的时候,代表了刷写到磁盘日志所处的LSN的位置, 日志的逻辑序列号;

redo log 从日志 redo buffer 到 redo log file 持久化的示意图

从日志缓存持久化到 内核空间os buffer --->file文件中;

image.png

猜你喜欢

转载自juejin.im/post/7031911014278889503