原文链接:double write buffer——mysql
MySQL 的 buffer 一页的大小是 16K,文件系统一页的大小是 4K,也就是说,MySQL 将 buffer 中一页数据刷入磁盘,要写 4 个文件系统里的页。
那么,问题来了,这个操作并非原子,如果执行到一半断电,会不会出现问题呢?
会,这就是所谓的“页数据损坏”。
如上图所示,当有页数据要刷盘时:
第一步:页数据先 memcopy 到 DWB 的内存里;
第二步:DWB 的内存里,会先刷到 DWB 的磁盘上;
第三步:DWB 的内存里,再刷到数据磁盘存储上;
画外音:DWB 由 128 个页构成,容量只有 2M。