「这是我参与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文件中;