MySQL:sync_binlog 0 会延迟复制吗?

MySQL:sync_binlog 0 会延迟复制吗?

如果我们将 sync_binlog 设置为 0,这会延迟操作系统将二进制日志同步到磁盘,这是否会给从属服务器复制这些二进制日志的时间带来任何滞后?换句话说,二进制日志在刷新到磁盘之前是否可能被中继到从属服务器?

答案1

不,不应该。

MySQL 仍然像以前一样写入 binlog,只是它自己不调用同步。它让文件系统刷新它到磁盘。MySQL 不是直接从磁盘读取,而是从虚拟文件系统层读取,该层在调用同步之前(如果调用)已经有数据。

我认为将其设置为 0 的唯一主要缺点是,如果发生崩溃或中断对底层存储的访问,您可能会丢失尚未刷新到磁盘的数据。作为交换,您将减少同步,这可能会提高底层存储的性能。

将其设置为 0 只会让操作系统像处理其他应用程序一样处理同步。将其设置为 1 将为您提供绝对最大的耐用性,但性能可能会有所下降。

我使用 sync_binlog=0 运行生产服务器,从未注意到任何延迟。如果底层存储真的很慢,将其提高到 0 以上可能会导致可测量的延迟。

fdatasync(2) 的手册页可以帮助您更好地理解。

答案2

我知道,现在回答有点晚了,但只是为了快速参考。

我偶然发现的一个链接阿卜杜勒-毛拉(好文章!)显示了当 sync_log 标记为“0”和“1”时“吞吐量”的比较:

http://www.fromdual.com/galera-cluster-vs-pxc-vs-mariadb-galera-cluster-benchmarking

此外,从MySQL 文档,MySQL 5.7.7 自带的默认值为 1,这会影响性能。

相关内容