簡介 詳細講述 sync_binlog參數
一 參數
包含兩部分 1 sync本地磁盤 2 dump_thread時機
sync_binlog=0
1 binary log 不 sync 刷盤,依賴於 OS 刷盤機制
2 在flush階段后通知DUMP線程發送Event。(不進入sync階段)
sync_binlog=1
1 binary log 每次 sync 隊列形成后都進行sync刷盤 約等於每次group commit 進行刷盤
2 在 sync 階段后通知DUMP線程發送 Event
sync_binlog = N
1 binary log 將在指定次 sync 隊列形成后進行 sync 刷盤
2 會在 flush 階段后通知 DUMP 線程發送 Event。
二 binlog組提交技術
1 Flush:所有已經注冊線程都將寫入binary log緩存
2 Sync :binary log緩存的數據將會sync到磁盤,當sync_binlog=1時所有該隊列事務的二進制日志緩存永久寫入磁盤
3 Commit: leader根據順序調用存儲引擎提交事務(innodb層)
4 所有隊列都是串行化執行,這點要牢記
三 組提交細節
如何提高一次性group commit的數量
binlog_group_commit_sync_delay毫秒直到達到 binlog_group_commit_sync_no_delay_count事務個數時,將進行一次組提交。
四 具體流程
存儲引擎(InnoDB) Prepare ----> 數據庫上層(Binary Log) Flush Stage ----> Sync Stage ----> 調存儲引擎(InnoDB)Commit stage.
五 總結
1 sync_binlog如果設置非1 可能導致從庫比主庫多數據.所以在重要環境還是建議使用sync_binlog=1
2 不同的sync_binlog值 對於dump線程何時獲取binlog都是有影響的
3 dump線程確實是獲取的binlog cache
4 所謂的sync_binlog涉及到的就是binlog組提交的sync階段
此文章大多來源八怪大神相關文章總結,特此說明