當您安裝半同步複製的來源和副本外掛程式時(請參閱章節 19.4.10.1,「安裝半同步複製」),系統變數可用於控制外掛程式行為。
若要檢查半同步複製的狀態變數目前的值,請使用 SHOW VARIABLES
mysql> SHOW VARIABLES LIKE 'rpl_semi_sync%';
所有 rpl_semi_sync_
系統變數都在章節 19.1.6.2,「複製來源選項和變數」和章節 19.1.6.3,「副本伺服器選項和變數」中描述。一些關鍵系統變數如下:xxx
-
rpl_semi_sync_source_enabled
控制來源伺服器上是否啟用半同步複製。若要啟用或停用外掛程式,請將此變數分別設定為 1 或 0。預設值為 0(關閉)。
-
rpl_semi_sync_replica_enabled
控制副本上是否啟用半同步複製。
-
rpl_semi_sync_source_timeout
以毫秒為單位的數值,控制來源在逾時並還原為非同步複製之前,等待複本確認提交的時間長度。預設值為 10000(10 秒)。
-
rpl_semi_sync_source_wait_for_replica_count
控制來源在返回會話之前,每個交易必須接收的複本確認數量。預設值為 1,表示來源僅等待一個複本確認接收到交易的事件。
rpl_semi_sync_source_wait_point
系統變數控制半同步來源伺服器等待複本確認收到交易的時間點,然後才將狀態返回給提交交易的客戶端。允許的值如下
AFTER_SYNC
(預設):來源將每個交易寫入其二進位日誌和複本,並將二進位日誌同步到磁碟。來源在同步後等待複本確認收到交易。收到確認後,來源將交易提交到儲存引擎,並將結果返回給客戶端,客戶端隨後可以繼續。AFTER_COMMIT
:來源將每個交易寫入其二進位日誌和複本,同步二進位日誌,並將交易提交到儲存引擎。來源在提交後等待複本確認收到交易。收到確認後,來源將結果返回給客戶端,客戶端隨後可以繼續。
這些設定的複製特性差異如下
使用
AFTER_SYNC
時,所有客戶端在同一時間看到已提交的交易,也就是在複本確認並提交到來源的儲存引擎之後。因此,所有客戶端在來源上看到相同的資料。如果來源發生故障,則來源上提交的所有交易都已複製到複本(已儲存到其中繼日誌)。來源意外退出並故障轉移到複本是無損的,因為複本是最新的。如上所述,故障轉移後不應重複使用來源。
使用
AFTER_COMMIT
時,發出交易的客戶端僅在伺服器提交到儲存引擎並收到複本確認後,才會收到返回狀態。在提交之後和複本確認之前,其他客戶端可以在提交客戶端之前看到已提交的交易。如果出現問題導致複本沒有處理交易,那麼在來源意外退出並故障轉移到複本的情況下,這些客戶端可能會看到相對於他們在來源上看到的資料遺失。
您可以透過啟用系統變數 replication_sender_observe_commit_only
來提高半同步複製的效能,該變數限制回呼,以及啟用 replication_optimize_for_static_plugin_config
,該變數會新增共用鎖定並避免不必要的鎖定取得。這些設定在複本數量增加時有幫助,因為鎖定的競爭會降低效能。半同步複製來源伺服器也可以透過啟用這些系統變數來獲得效能優勢,因為它們使用與複本相同的鎖定機制。