當群組複製群組成員之間傳送異常大的訊息時,可能會導致某些群組成員回報為失敗並從群組中驅逐。這是因為群組複製的群組通訊引擎 (XCom,一種 Paxos 變體) 所使用的單一執行緒佔用處理訊息的時間過長,因此某些群組成員可能會將接收器回報為失敗。依預設,大型訊息會自動分割成分段,這些分段會個別傳送並由接收者重新組合。
系統變數 group_replication_communication_max_message_size
指定群組複製通訊的最大訊息大小,超過此大小的訊息會被分段。預設的最大訊息大小為 10485760 位元組 (10 MiB)。允許的最大值與 replica_max_allowed_packet
系統變數的最大值 (1 GB) 相同。group_replication_communication_max_message_size
必須小於 replica_max_allowed_packet
,因為套用程式執行緒無法處理大於允許的最大封包大小的訊息分段。若要關閉分段,請為 group_replication_communication_max_message_size
指定零值。
與大多數其他群組複製系統變數一樣,您必須重新啟動群組複製外掛程式,變更才會生效。例如
STOP GROUP_REPLICATION;
SET GLOBAL group_replication_communication_max_message_size= 5242880;
START GROUP_REPLICATION;
當訊息的所有分段都已由所有群組成員接收並重新組裝時,才視為已完成分段訊息的傳遞。分段訊息在其標頭中包含資訊,讓在訊息傳輸期間加入的成員可以復原在其加入之前傳送的早期分段。如果加入的成員無法復原分段,則會將自己從群組中驅逐。
群組使用的群組複製通訊協定版本必須允許分段。您可以使用 group_replication_get_communication_protocol()
取得群組正在使用的通訊協定,此函數會傳回群組支援的最舊 MySQL Server 版本。如有必要,請使用 group_replication_set_communication_protocol()
將通訊協定版本設定為足夠高 (8.0.16 或更高版本) 以允許分段。如需更多資訊,請參閱第 20.5.1.4 節「設定群組的通訊協定版本」。
如果複製群組因為某些成員不支援而無法使用分段,則可以使用系統變數 group_replication_transaction_size_limit
來限制群組接受的交易最大大小。大於此大小的交易會復原。您也可以使用 group_replication_member_expel_timeout
,在疑似失敗的成員從群組中驅逐之前,允許額外的時間 (最多一小時)。