Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


20.7.5 消息碎片

当 Group Replication 组成员之间发送了异常大的消息时,这可能会导致一些组成员被报告为失败并从组中驱逐出去。这是因为 Group Replication 的群体通信引擎(XCom,Paxos 变体)使用的单个线程在处理消息太长时间,所以一些组成员可能会报告接收方为失败。默认情况下,大型消息将被自动分割成碎片,并由接收方重新组装。

系统变量group_ replication_communication_max_message_size指定了 Group Replication 通信的最大消息大小,超过该值的消息将被分割。默认的最大消息大小为 10485760 字节(10 MiB)。允许的最大值与replica_max_allowed_packet系统变量的最大值相同(1 GB)。group_ replication_communication_max_message_size必须小于replica_max_allowed_packet,因为应用线程无法处理大于最大允许包大小的消息碎片。要关闭分割,指定group_ replication_communication_max_message_size为零值。

与大多数其他Group Replication系统变量一样,您必须重新启动Group Replication插件,以使更改生效。例如:

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

对一个分片消息的传递被认为是完成的,当所有该消息的分片都被接收和重组到所有组成员中时。包括在消息头中的信息使得在消息传输过程中加入的成员可以恢复之前发送的分片。如果加入的成员无法恢复分片,它将自己从组中驱逐。

组Replication通信协议版本必须允许分片。你可以使用group_replication_get_communication_protocol()来获取组中使用的通信协议版本,该函数返回组支持的最古老MySQL Server版本。如果必要,可以使用group_replication_set_communication_protocol()将通信协议版本设置到足够高(8.0.16或以上)以允许分片。更多信息,请见第20.5.1.4节,“设置组的通信协议版本”

如果复制组不能使用碎片,因为某些成员不支持它,那么系统变量<code class="literal">group_replication_transaction_size_limit</code>可以用来限制组接受的最大事务大小。超过这个大小的事务将被回滚。你也可以使用<code class="literal">group_replication_member_expel_timeout</code>来允许在成员疑似失败时额外的时间(最多是一小时)之前将其从组中驱逐。