對於線上群組成員之間傳送的訊息,群組複製預設會啟用訊息壓縮。特定訊息是否壓縮取決於您使用 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 次。此外,二進位記錄可能會展現較高的壓縮率。這使得壓縮成為包含大型交易的群組複製工作負載的引人注目的功能。