mysql8.0插入慢之sync_binlog(一)

huxiaobai_001發表於2020-07-22

Mysql配置引數sync_binlog說明
ySQL提供一個sync_binlog引數來控制資料庫的binlog刷到磁碟上去。

預設,sync_binlog=0,表示MySQL不控制binlog的重新整理,由檔案系統自己控制它的快取的重新整理。這時候的效能是最好的,但是風險也是最大的。因為一旦系統Crash,在binlog_cache中的所有binlog資訊都會被丟失。

如果sync_binlog>0,表示每sync_binlog次事務提交,MySQL呼叫檔案系統的重新整理操作將快取刷下去。最安全的就是sync_binlog=1了,表示每次事務提交,MySQL都會把binlog刷下去,是最安全但是效能損耗最大的設定。這樣的話,在資料庫所在的主機作業系統損壞或者突然掉電的情況下,系統才有可能丟失1個事務的資料。但是binlog雖然是順序IO,但是設定sync_binlog=1,多個事務同時提交,同樣很大的影響MySQL和IO效能。雖然可以通過group commit的補丁緩解,但是重新整理的頻率過高對IO的影響也非常大。對於高併發事務的系統來說,“sync_binlog”設定為0和設定為1的系統寫入效能差距可能高達5倍甚至更多。

所以很多MySQL DBA設定的sync_binlog並不是最安全的1,而是100或者是0。這樣犧牲一定的一致性,可以獲得更高的併發和效能。

sync_binlog你可以調大一些10000 20000 或者100 比較一下效果 找到合適的值設定一下看看!

本作品採用《CC 協議》,轉載必須註明作者和本文連結

胡軍

相關文章