Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

20.7.4 消息压缩

在组复制中,默认情况下,消息压缩是启用的。是否压缩特定消息取决于使用 group_replication_compression_threshold 系统变量配置的阈值。 payload 大小超过指定字节数的消息将被压缩。

默认压缩阈值为 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_algorithmsgroup_replication_recovery_zstd_compression_level 系统变量来配置分布式恢复期间的消息压缩。有关更多信息,请参阅 第 6.2.8 节,“连接压缩控制”

二进制日志事务压缩,启用了 binlog_transaction_compression 系统变量,也可以节省带宽。事务负载保持压缩状态,当它们在组成员之间传输时。如果您将二进制日志事务压缩与组复制的消息压缩结合使用,消息压缩将少有机会作用于数据,但仍可以压缩头部和未压缩的事件和事务负载。有关二进制日志事务压缩的更多信息,请参阅 第 7.4.4.5 节,“二进制日志事务压缩”

组内消息压缩发生在组通信引擎级别,在数据被传递给组通信线程之前,因此它发生在 mysql 用户会话线程的上下文中。如果消息负载大小超过 group_replication_compression_threshold 设置的阈值,则事务负载将被压缩,然后发送到组中,并在接收时解压缩。成员在接收消息时检查消息封套,以确定是否压缩。如果需要,则成员解压缩事务,然后将其传递给上层。该过程如以下图所示。

图 20.13 压缩支持

The MySQL Group Replication plugin architecture is shown as described in an earlier topic, with the five layers of the plugin positioned between the MySQL server and the replication group. Compression and decompression are handled by the Group Communication System API, which is the fourth layer of the Group Replication plugin. The group communication engine (the fifth layer of the plugin) and the group members use the compressed transactions with the smaller data size. The MySQL Server core and the three higher layers of the Group Replication plugin (the APIs, the capture, applier, and recovery components, and the replication protocol module) use the original transactions with the larger data size.

当网络带宽成为瓶颈时,消息压缩可以在组通信级别上提供高达30-40%的吞吐量改进。这在大型服务器组下负载的情况下尤其重要。组中N个参与者的TCP点对点互连性使得发送方将相同的数据发送N次。此外,二进制日志很可能具有高压缩比。这使得压缩成为包含大事务的Group Replication工作负载的引人注目的功能。