什么时候禁用 InnoDB 双写缓冲是安全的?

Pac*_*ier 8 mysql innodb locking transaction-log data-integrity

MySQL InnoDB 允许我们通过设置innodb_doublewrite = 0. 其他数据库似乎不允许调整此设置

如果我们禁用双写缓冲,InnoDB 如何仍然能够保持数据完整性ACID

在什么情况下关闭 InnoDB 双写缓冲区是安全的

Rol*_*DBA 12

我能想到的唯一情况是重新加载一个大的 mysqldump。为什么 ?

查看 InnoDB 的这个图示(Percona CTO Vadim Tkachenko)

InnoDB 架构

从图中可以看出InnoDB Buffer Pool将脏页写入

  • 日志缓冲区
  • 在 ibdata1 中插入缓冲区
  • ibdata1 中的双写缓冲区
  • .ibd 每个 InnoDB 表的文件

关闭双写缓冲区将使 mysqldump 更快地在表中写入数据和索引页,因为它不必写入相同的16K 页写入 ibdata1。

生产服务器不应禁用双写缓冲区。如果您这样做是为了更快地加载数据(当然是在维护期间),请在重新加载 DB Server 后立即启用它。

换句话说,

  • 添加innodb_doublewrite = 0my.cnf
  • SET GLOBAL innodb_fast_shutdown = 0;
  • 重启mysql
  • 加载mysqldump
  • 删除innodb_doublewrite = 0my.cnf
  • SET GLOBAL innodb_fast_shutdown = 0;
  • 重启mysql


Vér*_*ace 8

伊夫·特鲁多在这篇文章中很好地处理了这个问题,他似乎暗示这是安全的——他的结论是

结论

与 ZFS 一样,ext4 可以是事务性的,并且用文件系统事务日志替换 InnoDB 双写缓冲区可以将写入密集型工作负载的性能提高 55%。SSD 和混合旋转/SSD 配置也有望获得性能提升

他基本上是说,如果你有一个合适的文件系统,那么是的,它可以是安全的。

Percona 的人真的很了解他们的东西。

  • 发布后,特鲁多在他的帖子中添加了一条更新:**不要这样做,这已被证明会损坏数据!** (3认同)