對於在線上群組成員之間傳送的訊息,群組複製預設啟用訊息壓縮。特定訊息是否壓縮取決於您使用 group_replication_compression_threshold
系統變數設定的臨界值。有效負載大於指定位元組數的訊息會被壓縮。
預設壓縮臨界值為 1000000 位元組。您可以使用以下陳述式將壓縮臨界值增加到 2MB,例如
STOP GROUP_REPLICATION;
SET GLOBAL group_replication_compression_threshold = 2097152;
START GROUP_REPLICATION;
如果您將 group_replication_compression_threshold
設定為零,則會停用訊息壓縮。
群組複製使用 LZ4 壓縮演算法來壓縮群組中傳送的訊息。請注意,LZ4 壓縮演算法支援的最大輸入大小為 2113929216 位元組。此限制低於 group_replication_compression_threshold
系統變數的最大可能值,該值與 XCom 接受的最大訊息大小相符。因此,LZ4 最大輸入大小是訊息壓縮的實際限制,當啟用訊息壓縮時,無法提交大於此大小的交易。使用 LZ4 壓縮演算法時,請勿為 group_replication_compression_threshold
設定大於 2113929216 位元組的值。
group_replication_compression_threshold
的值並非群組複製所要求在所有群組成員上都相同。但是,建議在所有群組成員上設定相同的值,以避免不必要的交易回溯、訊息傳遞失敗或訊息復原失敗。
您也可以使用捐贈者的二進位記錄,針對從捐贈者傳送以進行分散式復原的訊息設定壓縮。從已在群組中的捐贈者傳送到加入成員的這些訊息的壓縮,是使用 group_replication_recovery_compression_algorithms
和 group_replication_recovery_zstd_compression_level
系統變數個別控制。如需更多資訊,請參閱第 6.2.8 節「連線壓縮控制」。
二進位記錄交易壓縮,由 binlog_transaction_compression
系統變數啟用,也可用於節省頻寬。當交易有效負載在群組成員之間傳輸時,會保持壓縮狀態。如果您將二進位記錄交易壓縮與群組複製的訊息壓縮結合使用,則訊息壓縮對資料執行動作的機會較少,但仍然可以壓縮標頭和未壓縮的那些事件和交易有效負載。如需二進位記錄交易壓縮的詳細資訊,請參閱第 7.4.4.5 節「二進位記錄交易壓縮」。
在將資料移交至群組通訊執行緒之前,群組中傳送訊息的壓縮會在群組通訊引擎層級發生,因此它會在 mysql
使用者工作階段執行緒的內容中發生。如果訊息有效負載大小超過 group_replication_compression_threshold
設定的臨界值,則交易有效負載會在傳送至群組之前壓縮,並在接收時解壓縮。接收訊息時,成員會檢查訊息封包以驗證是否已壓縮。如果需要,則成員會解壓縮交易,然後將其傳遞到上層。此過程顯示在下圖中。
當網路頻寬成為瓶頸時,訊息壓縮可以在群組通訊層級提供高達 30-40% 的輸送量改進。這在負載下的大型伺服器群組的內容中尤其重要。群組中 N 個參與者之間的相互連線的 TCP 對等性質會使傳送者傳送相同的資料量 N 次。此外,二進位記錄很可能會展現高壓縮率。這使得壓縮成為包含大型交易的群組複製工作負載的引人注目的功能。