MySQL使用的是邏輯複製,一個事務在主庫執行結束後,會發送事務產生的Binlog event到備庫應用,進而保證主備的一致性。在這種架構下,對於耗時間長度的大事務,會導致備庫有顯著的複寫延遲。為解決此問題,RDS MySQL推出了大事務即時應用功能。該功能可以在主庫執行大事務時通知備庫執行大事務,達到主備同時執行大事務的效果,從而基本消除大事務導致的複寫延遲,保障執行個體的高可用。
功能簡介

大事務複寫延遲(左圖):在MySQL中,大事務是在主庫提交後才被傳輸到從庫開始應用,因此大事務在從庫的執行時間基本相當於複寫延遲的時間。在此期間,主庫後續提交的其他事務都無法應用,從庫的時效性受到嚴重影響。
大事務即時應用最佳化(右圖):大事務複寫延遲的核心最佳化思路是:讓從庫和主庫同步執行大事務,當大事務在主庫提交時,從庫也跟著提交;當大事務在主庫復原時,從庫也跟著復原。
適用範圍
使用大事務即時應用最佳化功能時,需滿足以下條件:
使用方法
訪問RDS執行個體列表,在上方選擇地區,然後單擊目標執行個體ID。
在左側導覽列中單擊參數設定。
在可修改參數頁簽內搜尋以下參數並配置:
開啟大事務即時應用最佳化功能:
設定
loose_binlog_realtime_apply_long_trx_enabled為ON。設定
loose_binlog_realtime_transmit_source_enabled為ON。設定
loose_binlog_realtime_transmit_replica_enabled為ON。
其他需要配置的參數:
參數名
參數說明
推薦值
loose_binlog_realtime_replica_long_transaction_limit_size定義觸發即時複製的事務大小閾值。當一個事務產生的Binlog超過該值,其即時複製功能便會自動啟用。
64 MB
loose_binlog_realtime_enable_log_messag是否將即時複製的作業記錄記錄到error log中,建議開啟。
ONloose_binlog_realtime_apply_workers
控制從庫用來即時複製的Brr Worker線程數。
8
單擊確定,然後單擊提交參數,並在彈出的視窗中選擇生效的時間段。參數修改立即生效,無需重啟執行個體。
最佳化效果
在主庫執行一個500萬行的資料匯入事務,可以看到:
最佳化前:事務先在主庫執行,提交後開始在從庫上應用,從庫上複寫延遲的期間和事務執行時間相等。
最佳化後:事務同時在主庫和從庫執行,從庫上沒有出現複寫延遲。
