0
点赞
收藏
分享

微信扫一扫

06.InnoDB引擎之-两次写机制原理(double write)

安七月读书 2022-05-01 阅读 61
mysql

参考文章:

  • 基于Redo Log和Undo Log的MySQL崩溃恢复流程
  • MySQL的Double Write并不难理解 
  • 答疑文章(一):日志和索引相关问题
  • 《MySQL技术内幕:InnoDB存储引擎》

作用

double write(两次写)使数据页更可靠。

当InnoDB存储引擎正在向磁盘写入数据页时(16KB的数据页只写入了前4KB),这时发生宕机,这种情况称为部分写失效(partial page write)。如果没有double write(两次写)机制,那么会造成数据丢失的情况。

double write(两次写)正是用来解决上述问题而设计的。

说明:数据页默认为16KB,文件系统一页默认大小为4KB。

原理

如上图所示,double write(两次写)由两部分组成,一部分是内存中的double write buffer ,大小2MB;另一部分是物理磁盘上共享空间中连续的128个页,即2个区,大小2MB。在对缓冲池的脏页刷新时,经过如下步骤:

  1. 先通过memcpy函数将脏页先复制到double write buffer中
  2. 然后每次以1MB大小顺序写入共享表空间的物理磁盘上(因为该空间维护的是128个连续页,最小16KB,所以不会出现部分写失效情况)
  3. 马上调用fsync函数同步磁盘
  4. 如果在同步磁盘的过程中发生崩溃,InnoDB存储引擎从共享表空间中doublewrite中找到该页的一个副本,将其复制到表空间文件

 

举报

相关推荐

0 条评论