必须采取哪些步骤来确保默认配置的 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