Binlog in Redo功能在事務提交時將Binlog內容同步寫入到Redo Log中,減少對磁碟的同步IO次數,進而提高資料庫效能。
前提條件
執行個體大版本為MySQL 8.0。
執行個體核心小版本為20200430或以上。
如需升級執行個體核心小版本,請參見升級核心小版本。
執行個體的
sync_binlog參數取值為1,binlog_order_commits參數取值為OFF,請參見設定執行個體參數。執行個體的資料複製方式配置為非同步複製,請參見查詢和修改資料複製方式。
背景資訊
在MySQL關鍵業務情境中,為了業務資料的安全,事務提交時必須將對應的Binlog和Redo Log同步落盤,即以下兩個參數必須同時設定為1:
sync_binlog = 1;
innodb_flush_log_at_trx_commit = 1;在原生MySQL中,每個事務提交時會對磁碟進行2次同步I/O操作(1次Binlog落盤+1次Redo Log落盤),這影響了事務提交的效率。當使用雲端硬碟儲存時,同步I/O帶來的影響會更明顯。
為提升事務提交效率,AliSQL引入了Binlog in Redo功能(通過參數persist_binlog_to_redo=ON開啟,預設關閉)。該功能在事務提交時,將Binlog內容與Redo Log合并寫入,僅需一次同步I/O完成Redo Log的持久化,Binlog資料也隨之落盤。這一設計減少了原生MySQL中Binlog和Redo Log分別落盤所需的兩次I/O 操作,顯著降低資料庫響應延遲並提升輸送量。
此外,針對高並發情境下GTID分配與釋放的鎖競爭問題,Binlog in Redo採用 批量處理最佳化,通過成組提交機制減少鎖衝突,進一步保障高並發效能。
Binlog檔案的寫入由後台線程非同步執行,按周期批量追加到檔案中,避免了即時fsync帶來的檔案系統壓力,從而提升整體I/O效率。即使資料庫發生異常重啟,系統也能通過回放Redo Log中的Binlog 資料,自動修複Binlog檔案的完整性,確保資料一致性。
Binlog in Redo功能不會改變Binlog的格式,基於Binlog的複製及第三方工具也不會受任何影響。
注意事項
開啟Binlog in Redo功能後,高效能本地碟執行個體如果需要使用物理備份檔案恢複到自建資料庫,需要使用RDS提供的XtraBackup工具。安裝XtraBackup工具請參見工具準備。
參數介紹
persist_binlog_to_redo
Binlog in Redo功能開關。全域系統變數,取值:on或off。修改本參數立刻生效,不需要重啟執行個體。
說明開啟本功能除了需要將
persist_binlog_to_redo設定為on,您還需配置binlog_order_commits為off,並將執行個體的資料複製方式配置為非同步複製。設定執行個體參數請參見設定執行個體參數。
設定資料複製方式請參見查詢和修改資料複製方式。
如果您執行個體的
sync_binlog參數配置不為1,設定上述參數也不會開啟Binlog in Redo功能,建議您使用Binlog Parallel Flush功能來最佳化執行個體的效能。sync_binlog_interval
Binlog非同步儲存的間隔。全域系統變數,當
persist_binlog_to_redo = on時生效。預設值:50,單位:毫秒(ms),通常使用預設值即可。修改本參數立刻生效,不需要重啟執行個體。
效能壓力測試
測試環境
應用伺服器:阿里雲ECS執行個體
RDS執行個體規格: 32核、128 GB記憶體、ESSD雲端硬碟
執行個體類型:高可用系列(資料複製方式為非同步複製)
測試案例
使用的Sysbench內建用例如下:
oltp_update_non_index
oltp_write_only
測試結果
oltp_update_non_index
開啟Binlog in Redo後,TPS在低並發情境下提升顯著,高並發情境下也有明顯提升,具有較低的延遲。


oltp_write_only
開啟Binlog in Redo後,TPS在低並發和高並發情境下有明顯提升,同時具有較低的延遲。


測試總結
oltp_update_non_index只包含單語句事務,事務提交次數多,而oltp_write_only包含多語句事務(2個UPDATE、1個DELETE、1個INSERT),相比oltp_update_non_index事務提交次數較少,所以oltp_update_non_index的效能提升比oltp_write_only更為明顯。
在低於64並發時,Binlog in Redo功能可以明顯提升效能和降低延遲,對絕大多數的實際使用情境來說效果顯著。
在高於256並發時,Binlog in Redo功能具有更高的峰值效能和更低的延遲,可以更好地承接突增流量。