• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 邮件碎片

    在组复制组成员之间发送异常大的消息时,可能导致某些组成员被报告为失败并从该组驱逐。这是因为组复制的组通信引擎(XCom,一个Paxos变体)使用的单线程占用的消息处理时间太长,因此某些组成员可能会报告接收者失败。从MySQL 8.0.16开始,默认情况下,大型邮件信息会自动拆分为片段,分别发送并由收件人重新组合。

    系统变量group_replication_communication_max_message_size为组复制通信指定最大消息大小,在该最大消息大小之上,消息将被分段。默认的最大邮件大小为10485760字节(10 MiB)。允许的最大值与slave_max_allowed_packet系统变量的最大值相同,为1073741824字节(1 GB)。的设置group_replication_communication_max_message_size必须小于该slave_max_allowed_packet设置,因为应用程序线程无法处理大于的消息片段slave_max_allowed_packet。要关闭分段,请为指定零值group_replication_communication_max_message_size

    与大多数其他组复制系统变量一样,您必须重新启动组复制插件才能使更改生效。例如:

    STOP GROUP_REPLICATION;
    SET GLOBAL group_replication_communication_max_message_size= 5242880;
    START GROUP_REPLICATION;
    

    当所有组成员都已接收并重新组合了消息的所有片段时,就认为碎片消息的消息传递已完成。碎片消息的标头中包含信息,这些信息使成员能够在消息传输期间加入,以恢复在加入之前发送的较早的碎片。如果加入成员无法恢复碎片,则将其从组中驱逐出去。

    为了使复制组能够使用分段,所有组成员必须位于MySQL 8.0.16或更高版本,并且该组使用的“组复制”通信协议版本必须允许分段。您可以使用group_replication_get_communication_protocol() UDF 检查组正在使用的通信协议,该 UDF返回该组支持的最旧的MySQL Server版本。MySQL 5.7.14的版本允许压缩消息,而MySQL 8.0.16的版本也允许消息分段。如果所有组成员都位于MySQL 8.0.16或更高版本,并且不需要允许早期版本的成员加入,则可以使用group_replication_set_communication_protocol() UDF将通信协议版本设置为MySQL 8.0.16或更高版本,以允许分段。有关更多信息,请参见“设置组的通信协议版本”。

    如果复制组由于某些成员不支持而无法使用分段,group_replication_transaction_size_limit则可以使用系统变量来限制该组接受的最大事务大小。在MySQL 8.0中,默认设置约为143 MB。超过此大小的事务将回滚。您还可以使用系统变量group_replication_member_expel_timeout允许有更多时间(最多一个小时),然后将怀疑是失败的成员从组中驱逐出去。


    上篇:消息压缩

    下篇:XCom缓存管理