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 文件中;
版权声明: 本文为 InfoQ 作者【卢卡多多】的原创文章。
原文链接:【http://xie.infoq.cn/article/d8a7ff9c58595ce616ddb35b6】。文章转载请联系作者。
评论