2024-11-28
请问各位老大mysql double write机制为什么解决partial write问题?
请问各位老大mysql double write机制为什么解决partial write问题?
如果double write buffer就写坏怎么解决?
谢谢!
我来答
添加附件
收藏
分享
问题补充
2条回答
默认
最新
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
墨值悬赏
请问各位老大mysql double write机制为什么解决partial write问题?
如果double write buffer就写坏怎么解决?
谢谢!
因为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
墨值悬赏