暂无图片
请问各位老大mysql double write机制为什么解决partial write问题?
我来答
分享
小北
2024-11-28
请问各位老大mysql double write机制为什么解决partial write问题?

请问各位老大mysql double write机制为什么解决partial write问题?

如果double write buffer就写坏怎么解决?

谢谢!

我来答
添加附件
收藏
分享
问题补充
2条回答
默认
最新
龙舌兰地落🌏

因为Linux文件系统页(OS page)默认大小是4KB,而MySQL的页(Page)默认大小是16KB。如果只是写了一部分页就宕机了,那就写坏。

而double write机制下整个数据页落盘刷新的过程是:
1.buffer数据页先copy到double write buffer的内存里;
2.double write buffer的内存数据刷到double write buffer的磁盘上;
3.double write buffer的内存再刷到数据磁盘上;

当MySQL出现异常崩溃时,有如下几种情况发生:
情况一:步骤1前宕机,刷盘未开始,数据在redo log,后期可以恢复
情况二:步骤1后,步骤2前宕机,因为是在内存中,宕机清空内存,和情况1一样
情况三:步骤2后,步骤3前宕机,因为DWB的磁盘有完整的数据,可以修复损坏的页数据

由此可以得出结论,double write buffer是针对实际的buffer数据页的原子性保证,就是避免MySQL异常崩溃时,写的那几个data page不会出错,要么都写了,要么什么都没有做。

暂无图片 评论
暂无图片 有用 2
暂无图片
小北
题主
2024-11-28
大佬,麻烦您问一下。既然double write buffer写坏了,可以用redo log恢复,那为什么数据页刷盘时候写坏了不能用redo log恢复?
龙舌兰地落🌏

写坏了是不能用redolog恢复的,数据页本身已经发生了损坏,redolog来恢复已经损坏的数据块是无效的,数据块的本身已经损坏,再次重做依然是一个坏块。

暂无图片 评论
暂无图片 有用 3
龙舌兰地落🌏
答主
2024-11-28
注:此条解释你问的数据页刷盘时候写坏了的情况
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏