如果我们将 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,这会影响性能。