双写缓冲区是一个存储区域,在
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
为 。