• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 消息压缩

    对于在线组成员之间发送的消息,默认情况下,组复制启用消息压缩。是否压缩特定消息取决于您使用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压缩算法时,请不要为设置大于2113929216字节的值group_replication_compression_threshold

    的值group_replication_compression_threshold不被组复制所需的是对所有的组成员的相同。但是,建议在所有组成员上设置相同的值,以避免不必要的事务回滚,消息传递失败或消息恢复失败。

    从MySQL 8.0.18开始,您还可以通过捐助者二进制日志中的状态转移方法,为发送给分布式恢复的消息配置压缩。这些消息的压缩是从组中已有的供体发送到加入成员的,使用group_replication_recovery_compression_algorithmgroup_replication_recovery_zstd_compression_level变量分别进行控制。

    在将数据移交给组通信线程之前,对在组中发送的消息的压缩发生在组通信引擎级别,因此它在mysql用户会话线程的上下文中进行。如果消息有效负载大小超过设置的阈值group_replication_compression_threshold,则在将事务有效负载发送到组之前对其进行压缩,并在接收到消息时对其进行解压缩。成员收到消息后,将检查消息信封以验证消息是否被压缩。如果需要,则成员先将事务解压缩,然后再将其交付给上层。下图显示了此过程。

    压缩支持

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

    上篇:流量控制

    下篇:邮件碎片