Documentation Home

14.6.5 双写缓冲区

双写缓冲区是一个存储区域,在 InnoDB将页面写入 InnoDB数据文件中的适当位置之前,写入从缓冲池中刷新的页面。如果在页面写入过程中出现操作系统、存储子系统或意外的mysqld 进程退出, InnoDB则可以在崩溃恢复期间从双写缓冲区中找到一份完好的页面副本。

虽然数据被写入两次,但双写缓冲区不需要两倍的 I/O 开销或两倍的 I/O 操作。数据以大的顺序块写入双写缓冲区,只需fsync()调用一次操作系统( innodb_flush_method设置为 的情况除外O_DIRECT_NO_FSYNC)。

在大多数情况下,默认情况下启用双写缓冲区。要禁用双写缓冲区,请设置 innodb_doublewrite为 0。

如果系统表空间文件(ibdata 文件)位于支持原子写入的 Fusion-io 设备上,双写缓冲将自动禁用,并且 Fusion-io 原子写入用于所有数据文件。由于双写缓冲区设置是全局的,因此对于驻留在非 Fusion-io 硬件上的数据文件,双写缓冲区也被禁用。此功能仅在 Fusion-io 硬件上受支持,并且仅在 Linux 上为 Fusion-io NVMFS 启用。要充分利用此功能,建议innodb_flush_method设置 O_DIRECT为 。