写点什么

redo Log 的持久化过程

作者:卢卡多多
  • 2021 年 11 月 18 日
  • 本文字数:605 字

    阅读完需:约 2 分钟

redo Log 的持久化过程

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 文件中;



发布于: 刚刚阅读数: 2
用户头像

卢卡多多

关注

努力寻找生活答案的旅途者 2020.04.12 加入

公众号:卢卡多多,欢迎一起交流学习

评论

发布
暂无评论
redo Log 的持久化过程