MySQL5.7的並行複製
阿新 • • 發佈:2018-11-20
MySQL5.6開始支援以schema為維度的並行複製,即如果binlog row event操作的是不同的schema的物件,在確定沒有DDL和foreign key依賴的情況下,就可以實現並行複製。
社群也有引入以表為維度或者以記錄為維度的並行複製的版本,不管是schema,table或者record,都是建立在備庫slave實時解析row格式的event進行判斷,保證沒有衝突的情況下,進行分發來實現並行。
MySQL5.7的並行複製,multi-threaded slave即MTS,期望最大化還原主庫的並行度,實現方式是在binlog event中增加必要的資訊,以便slave節點根據這些資訊實現並行複製。
MySQL 5.7的並行複製建立在group commit的基礎上,所有在主庫上能夠完成prepared的語句表示沒有資料衝突,就可以在slave節點並行複製。
關於MySQL5.7的組提交,我們要看下以下的引數:
binlog_group_commit_sync_delay這個引數控制著日誌在刷盤前日誌提交要等待的時間,預設是0也就是說提交後立即刷盤,但是並不代表是關閉了組提交,當設定為0以上的時候,就允許多個事物的日誌同時間一起提交刷盤,也就是我們說的組提交。組提交是並行複製的基礎,我們設定這個值的大於0就代表打開了組提交的延遲功能,而組提交是預設開啟的。最大值只能設定為1000000微妙。
binlog_group_commit_sync_no_delay_count ,這個引數表示我們在binlog_group_commit_sync_delay等待時間內,如果事物數達到binlog_group_commit_sync_no_delay_count 設定的引數,就會觸動一次組提交,如果這個值設為為0的話就不會有任何的影響。如果到達時間但是事物數並沒有達到的話,也是會進行一次組提交操作的。
參考:https://www.cnblogs.com/shengdimaya/p/6972278.html
mysql> show global variables like '%group_commit%';
+-----------------------------------------+-------+
| Variable_name | Value |
+-----------------------------------------+-------+
| binlog_group_commit_sync_delay | 0 |
| binlog_group_commit_sync_no_delay_count | 0 |
+-----------------------------------------+-------+
2 rows in set (0.00 sec)