8.2 MySQL性能标准规则

以下是 MySQL 性能标准合规性规则:

InnoDB 的 Flush 方法可能不是最优的

说明innodb_flush_method 的不同值会对 InnoDB 性能产生显着影响。在某些版本的 GNU/Linux 和 Unix 中,通过调用 fsync()(InnoDB 默认使用)或其他类似方法将文件刷新到磁盘可能会非常慢。如果您对数据库写入性能不满意,您可以尝试将 innodb_flush_method 参数设置为 O_DIRECT 或 O_DSYNC。

严重性轻微警告

建议根据您的应用程序、操作系统和存储环境检查您对 innodb_flush_method 变量的设置。它当前设置为 %flush_method% 。默认 ( fdatasync ) 可能是最好的。O_DIRECT 对 I/O 很有用,尤其是在“本地文件系统”中,因为它还避免了双重写入缓冲。但是,O_DIRECT 不适合网络附加存储,例如 SAN/NFS。O_DSYNC 会导致超出默认的 fdatasync 的额外开销,并且在许多 Unix 变种上都存在问题。然而,至少有一位用户报告说在 NetBSD 上使用 O_DSYNC 会产生巨大的差异。

InnoDB 日志缓冲区在每个事务后刷新到磁盘

描述默认情况下,InnoDB 的日志缓冲区在每个事务提交时写出到日志文件,并对日志文件执行刷新到磁盘操作,这强制 ACID 合规性。在发生崩溃时,如果您可以承受损失一秒钟的交易价值,则可以通过将 innodb_flush_log_at_trx_commit 设置为 0 或 2 来获得更好的性能。如果将值设置为 2,则只有操作系统崩溃或电源中断中断可以抹去最后一秒的交易。这在从服务器上非常有用,如果需要,可以从主服务器恢复丢失一秒的数据。

严重性轻微警告

建议在 my.cnf/my.ini 文件中设置 innodb_flush_log_at_trx_commit=2 并重新启动 MySQL 服务器。警告:ACID 合规性需要值为 1。如果将该值设置为 2,则操作系统崩溃或断电可能会擦除最后一秒的事务。不过,这对您的应用程序或环境可能并不重要,尤其是如果这是从属服务器并且可以从主服务器恢复一秒钟的数据丢失。