您可以通過開啟WRITESET模式,設定binlog_transaction_dependency_tracking
和transaction_write_set_extraction
參數來控制事務的衝突檢測機制,以便提高備庫回放並行度,降低主從延遲。
WRITESET簡介
MySQL預設的基於主庫組提交來判斷事務衝突的COMMIT_ORDER
模式,在一定程度上會受到主庫並發度的影響。WRITESET模式解決了這個問題,當該模式開啟時,每個事務提交時,會將當前事務修改的資料行與其他事務修改的資料行比較,只要事務修改的資料行互相不衝突,就可以在備庫並行回放,能夠解決大部分的備庫回放並發度不夠的問題。
開啟條件
支援開啟WRITESET的版本如下:
RDS MySQL 5.7小版本在20211231及以上。
RDS MySQL 8.0小版本在20210930及以上。
在DDL,大事務,修改外鍵表和無主鍵表這幾種業務情境中,事務的衝突檢測會從WRITESET退化到COMMIT_ORDER
模式,此時備庫的可並發度不會比COMMIT_ORDER
差,建議備庫和唯讀有複寫延遲問題的使用者主動開啟WRITESET模式。
開啟配置
開啟WRITESET需要完成如下參數設定,詳細操作請參見設定執行個體參數。
transaction_write_set_extraction = XXHASH64
binlog_transaction_dependency_tracking = WRITESET
binlog_transaction_dependency_history_size = 500000
binlog_transaction_dependency_history_size
是記憶體中儲存的做衝突檢測的資料行數量的上限值,該值越大,儲存的資料行越多,事務間衝突檢測後並發度越高。
參數取值規則
binlog_transaction_dependency_tracking
參數與transaction_write_set_extraction
參數存在關聯關係,不正確的對應關係不允許設定,會被攔截。需要按照以下規則設定參數值。
binlog_transaction_dependency_tracking | transaction_write_set_extraction |
|
|
|
|
參數解釋
binlog_transaction_dependency_tracking
和transaction_write_set_extraction
參數支援的核心小版本範圍為:
RDS MySQL 5.7:[20211231, 99999999)
RDS MySQL 8.0:[20210930, 99999999)
binlog_transaction_dependency_tracking
:含義:在多線程並行回放(
replica_parallel_workers
或slave_parallel_workers
大於0)中,binlog_transaction_dependency_tracking
用於決定如何計算事務之間的衝突和依賴關係,讓備庫能夠並行回放Binlog中的事務。預設值:
WRITESET
可選值及含義:
COMMIT_ORDER
:依賴主庫組提交判斷事務之間的依賴關係。如果兩個事務在主庫能夠並行提交,表示這兩個事務沒有衝突,能夠在備庫並行回放。此模式容易受到主庫並發度的影響。WRITESET
:用行層級粒度判斷事務之間的依賴關係。在有主鍵或唯一鍵的表中,只要兩個事務沒有更新同一行,那麼這兩個事務就能在備庫並行回放。不受主庫並發的影響。WRITESET_SESSION
:同一SESSION
的事務在備庫串列回放,不同SESSION
的事務按照WRITESET
的規則在備庫回放。
transaction_write_set_extraction
:含義:用於決定
WRITESET
使用何種雜湊演算法計算資料行的雜湊值。開啟WRITESET
後,將使用此演算法計算出的資料行雜湊值,判斷事務之間是否修改了相同的資料行。預設值:
XXHASH64
可選值及含義:
OFF
:不計算資料行的雜湊值,要求WRITESET
處於關閉狀態。XXHASH64
:使用64位的Hash
演算法計算資料行的雜湊值。
相關文檔
您可以通過參數診斷功能,擷取執行個體參數最佳化方案。
MySQL官方文檔: