mysql> SET GLOBAL group_replication_poll_spin_loops= 10000;
工作负载模拟程序 | 行格式压缩比例 | 语句格式压缩比例 |
---|---|---|
mysqlslapd | 4,5 | 4,1 |
sysbench | 3,4 | 2,9 |
# 这将压缩阈值设置为2MB。如果事务生成的复制消息的有效负载大于2MB,例如:二进制日志事务条目大于2MB,则对其进行压缩。若要禁用压缩,请将阈值设置为0。
STOP GROUP_REPLICATION;
SET GLOBAL group_replication_compression_threshold= 2097152;
START GROUP_REPLICATION;
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及其以上,这样就能够确保消息分段功能在组中所有成员上正常运行。有关更多信息,请参见"4.1.4. 设置组的通信协议版本”。
如果复制组由于某些成员不支持消息分段导致组不能使用消息分段,则可以使用系统变量group_replication_transaction_size_limit来限制该组所接受的最大事务大小。在MySQL 8.0中,默认设置大约为143 MB。超过这个大小的事务将被回滚。还可以使用系统变量group_replication_member_expel_timeout来设置一个在成员被驱逐出组之前,它被怀疑失败的额外时间(默认为0,从8.0.14版本开始,最大值为一个小时)。即,在该系统变量设置的时间内,被怀疑的成员不会被驱逐出组。
# 查询语句返回消息缓存的内存使用统计信息,包括当前缓存条目的数量和当前缓存的大小。如果降低了缓存大小限制,XCom将删除已经确定并交付的最老的条目,直到当前大小低于限制值为止。在删除最老的条目过程进行期间,XCom可能会暂时超过缓存大小限制。
mysql> SELECT * FROM performance_schema.memory_summary_global_by_event_name
WHERE EVENT_NAME LIKE 'memory/group_rpl/GCS_XCom::xcom_cache';
失败的场景 | 使用START GROUP_REPLICATION语句启动组复制 | 启用系统变量group_replication_start_on_boot =ON使组复制随数据库进程一并启动 |
---|---|---|
成员本地配置检查失败加入组的成员与组配置不匹配 | 系统变量super_read_only和offline_mode值保持不变允许MySQL Server继续运行在启动时设置系统变量super_read_only=ON以防止更新 | 同左 |
成员上的应用线程错误分布式恢复不可用组配置进行了错误的修改选主出错多数成员不可达超时被驱逐出组的成员超过自动重新加入组尝试次数仍未成功加入组的成员 | 系统变量super_read_only设置为ON 或系统变量offline_mode和super_read_only设置为ON 或MySQL Server关闭 | 同左 |
同左
同左