本篇文章為大家帶來了關於mysql中寫入Binary Log流程的相關知識,其中包含「sync_binlog」、「binlog_cache_size」和「max_binlog_cache_size」的相關問題,希望對大家有幫助。
我們首先還是先看看官方文件對sync_binlog配置的描述。
#命令列格式 | --sync-binlog= |
#系統變數 | sync_binlog |
##sync_binlog | |
影響範圍 | Global |
動態的 | #Yes |
##1
#最小值0
sync_binlog=1:在提交交易之前啟用二進位日誌到磁碟的同步。這是最安全的設置,但由於磁碟寫入次數增加,可能會對效能產生負面影響。在電源故障或作業系統崩潰的情況下,二進位日誌中遺失的交易僅處於準備狀態。這允許常規自動恢復回滾事務,從而保證不會從二進位日誌中遺失事務。#控制MySQL 伺服器將二進位日誌同步到磁碟的頻率。
sync_binlog=0:停用 MySQL 伺服器將二進位日誌同步到磁碟。相反,MySQL 伺服器依賴作業系統不時將二進位日誌刷新到磁碟,就像它對任何其他檔案所做的那樣。此設定提供了最佳效能,但如果發生電源故障或作業系統崩潰,伺服器可能已提交尚未刷盤的交易。
sync_binlog=1.
警告 |
#許多作業系統和一些磁碟硬體欺騙了刷新到磁碟操作。他們可能會告訴 mysqld已經發生了刷新,即使它還沒有發生。在這種情況下,即使使用建議的設定也無法保證交易的持久性,在最壞的情況下,斷電可能會損壞 InnoDB | 資料。 SCSI 磁碟控制器或磁碟本身使用電池支援的磁碟快取可加快檔案刷新速度,並使操作更安全。您也可以嘗試停用硬體快取中磁碟寫入的快取。
---|---|
sync_binlog設定類型為unsigned Integer。 | 一般不會設定為0,0依賴系統操作不定時fsync,發生電源故障或系統崩潰的時候比較危險-事務提交了但是Binary Log缺少了。 |
設定為大於1的值目的是提高效能不是一個交易提交就fsync下,相當於批量刷盤,是比較聰明的方式,但是如果出現電源故障或者係統崩潰的時候Binary Log缺少的會比較多。如果磁碟本身使用電池支援的磁碟快取會比較安全。所以當業務需要的IOPS比較高時可以設置,但是一般也不會設置過大,可以在[100,1000]區間中。 | |
下面我們繼續看看Binary Log在交易運行時的cache相關配置。 | binlog_cache_size |
--binlog-cache-size= | |
binlog_cache_size |
在交易期間保存二進位日誌變更的記憶體緩衝區的大小。該值必須是 4096 的倍數。
在伺服器上啟用二進位日誌記錄( log_bin系統變數設為 ON)時,如果伺服器支援任何交易儲存引擎,則會為每個用戶端指派一個二進位日誌快取。如果交易的資料超出記憶體緩衝區中的空間,超出的資料將儲存在暫存檔案中。當伺服器上的二進位日誌加密處於活動狀態時,記憶體緩衝區未加密,但(從 MySQL 8.0.17 開始)用於保存二進位日誌快取的任何臨時檔案都被加密。提交每個交易後,透過清除記憶體緩衝區並截斷臨時檔案(如果使用)來重置二進位日誌快取。
如果您經常使用大型事務,則可以透過減少或消除寫入臨時檔案的需要來增加此快取大小以獲得更好的效能。 Binlog_cache_use(服務狀態變數-使用Binary Log快取的交易數量)和 Binlog_cache_disk_use (服務狀態變數-使用臨時二進位日誌快取但超過binlog_cache_size值並使用暫存檔案儲存交易語句的交易數。)狀態變數可用來調整此變數的大小。請參閱第 5.4.4 節,「二進位日誌」。
binlog_cache_size
只設定交易快取的大小;語句快取的大小由 binlog_stmt_cache_size 系統變數控制。
指令格式 | |
##系統變數 | |
#範圍 | |
動態的 | |
##SET_VAR提示適用 | No |
類型 | Integer |
預設值 | 2^ 64=18446744073709547520 |
1844674407520 | |
#4096 | |
如果一個事務需要超過這麼多位元組的內存,伺服器會產生一個多語句事務需要超過 'max_binlog_cache_size' 字節的存儲錯誤。最小值為 4096。可能的最大值為 16EiB(exbibytes)。最大建議值為4GB;這是因為 MySQL 目前無法處理大於 4GB 的二進位日誌位置。該值必須是 4096 的倍數。
max_binlog_cache_size
只設定交易快取的大小;語句快取的上限由 max_binlog_stmt_cache_size 系統變數控制。
會話的可見性 max_binlog_cache_size
符合 binlog_cache_size系統變數的可見性;換句話說,變更其值只會影響變更值後啟動的新會話。
從上面的配置,我們可以得出,Binary Log大致的寫入流程:
所以大致流程如下圖:
至此我們大致了解了Mysql寫入Binary的流程,需要經過:每個事務持有的binlog cache -> 檔案系統的page cache -> 磁碟。可以透過sync_binlog進行控制具體執行策略。
推薦學習:mysql影片教學
#以上是完全掌握MySql之寫入Binary Log的流程的詳細內容。更多資訊請關注PHP中文網其他相關文章!