概要描述
kundb执行大事务sql报错 Error on observer while running replication hook 'before_commit'.
tail -f /vdir/mnt/disk1/kundb1/kundbdata/error.log 日志报错
Plugin group_replication_ reported: 'Error on session 797074. Transaction of size 3112288816 exceeds specified limit 2147483647. To increase the limit please adjust group_replication_transaction_size_limit option.
版本:kundb-2.1.8-final
详细介绍
这个错误是 MySQL Group Replication(组复制)插件抛出的,错误表明:事务大小超过了组复制允许的最大限制。
- 事务大小:2610251987 字节(约 2.43GB)。
- 限制阈值:2147483647 字节(约 2GB,即 2³¹ -1,这是 32 位有符号整数的最大值)。
- 触发原因:单个事务生成的二进制日志(binlog)或写集(writeset)超过了组复制的限制。
Group Replication 对单个事务的大小有限制,主要出于以下考虑。
- 复制性能:大事务会导致复制延迟,影响集群整体吞吐量;
- 内存消耗:事务需在各节点间同步,过大的事务可能导致节点内存溢出;
- 故障恢复:大事务在故障恢复时可能耗时过长,甚至导致节点崩溃。
所以只能改参数了。
这里的参数前面加了loose,为什么呢?
group_replication_transaction_size_limit:属于 “严格模式” 参数。
- 若 MySQL 未加载组复制插件(group_replication),启动时会因识别到未知参数报错,导致服务无法启动。
- 典型场景:初次配置组复制,还未启用插件就写入该参数到 my.cnf,重启数据库会失败。
loose_group_replication_transaction_sizelimit:带 loose 前缀,是 “宽松模式” 参数。
- 即使未加载组复制插件,MySQL 也会忽略该参数,正常启动服务 。
- 优势:方便在配置文件中提前预填组复制参数,无需严格区分 “是否已加载插件” 阶段,降低配置门槛。
修改方式:
kundb组件,新增自定义参数 loose_group_replication_transaction_size_limit,值为4294967296,(也就是4G),配置服务并重启。
重启完毕后,执行show variables like 'group_replication_transaction_size_limit'; 看是否修改成功。