保证 InnoDB 数据库的 ACID 属性

保证 InnoDB 数据库的 ACID 属性

必须采取哪些步骤来确保默认配置的 InnoDB 服务器真正符合 ACID 要求?InnoDB配置页面提到硬件本身必须配置为执行fsync调用,即禁用任何写回缓存。

这一页提到了一些其他问题,但可能混淆了二进制日志和 InnoDB 日志,并且对于 MySQL 5.x 的默认设置可能有点过时。

阅读后二进制日志文档页面看起来“sync_binlog=1”设置通常对于 ACID 属性不是必需的,仅对于与时间点恢复和复制相关的 ACID 属性来说才是必需的。

那么,禁用回写磁盘缓存是否足够,还是还有其他设置需要调整?

答案1

你问了一个很难的问题。以下是 MySQL 中的设置:

  • 同步格式
  • 同步 binlog
  • innodb-flush-log-at-trx-commit = 1(默认)
  • innodb_support_xa = 1(默认)
  • innodb_doublewrite= 1 (默认)
  • sync-relay-log = 1 (如果是从属)
  • rpl_transaction_enabled=1 (如果是从属 - 仅在 5.5 / Percona Server 中)

从操作系统/文件系统/等等来看:

  • 禁用磁盘或 RAID 控制器上任何非电池支持的缓存。
  • 确保操作系统不处于任何笔记本电脑模式等。

答案2

禁用写回并不一定会破坏 ACID。如果您的 RAID 控制器上有电池支持的写缓存,则不会破坏 ACID,而这样做的好处是写入容量会大大增加。但要注意的是,有些硬盘和 SSD(例如英特尔 X-25)有自己的写回缓存,即使您的 RAID 控制器有电池支持,它们也不是由电池支持的,因此绝对需要禁用它们。设置 O_DIRECT 还会让您的操作系统和文件系统不受干扰,让 RAID 控制器更有效地工作。

我通常使用这些设置来获得合理的可靠性:

innodb_flush_method=O_DIRECT
innodb_support_xa = 1
innodb-flush-log-at-trx-commit = 2

相关内容