double write buffer——mysql

84 阅读1分钟

原文链接:double write buffer——mysql

MySQL 的 buffer 一页的大小是 16K,文件系统一页的大小是 4K,也就是说,MySQL 将 buffer 中一页数据刷入磁盘,要写 4 个文件系统里的页。

那么,问题来了,这个操作并非原子,如果执行到一半断电,会不会出现问题呢?

会,这就是所谓的“页数据损坏”。

如上图所示,当有页数据要刷盘时:

第一步:页数据先 memcopy 到 DWB 的内存里;

第二步:DWB 的内存里,会先刷到 DWB 的磁盘上;

第三步:DWB 的内存里,再刷到数据磁盘存储上;

画外音:DWB 由 128 个页构成,容量只有 2M。