最近朋友压测MGR 8.0.27,发现一个问题:
mysql> select a.member_id,a.member_host,a.member_role,b.COUNT_TRANSACTIONS_REMOTE_IN_APPLIER_QUEUE from performance_schema.replication_group_members a, performance_schema.replication_group_member_stats b where a.MEMBER_ID=b.member_id;
+--------------------------------------+-------------+-------------+--------------------------------------------+
| member_id | member_host | member_role | COUNT_TRANSACTIONS_REMOTE_IN_APPLIER_QUEUE |
+--------------------------------------+-------------+-------------+--------------------------------------------+
| 6f450880-5e0c-11ec-9998-000c29e4ec4a | mgr10 | PRIMARY | 1 |
| 97a04402-5dae-11ec-9190-000c29a8c42a | mgr11 | SECONDARY | 0 |
+--------------------------------------+-------------+-------------+--------------------------------------------+我们发现主节点的COUNT_TRANSACTIONS_REMOTE_IN_APPLIER_QUEUE值不为1,因为这是单主,这个地方我们前面的文章已经说过,这个值的定义和所取的值为
- COUNT_TRANSACTIONS_REMOTE_IN_APPLIER_QUEUE(m_transactions_waiting_apply)
来自于m_transactions_waiting_apply.load(),这个值在Applier_handler::handle_event函数增加,当pipeline的Applier_handler处理完成,也就是写入了relay log后增加。这个值在hook group_replication_trans_before_commit处进行减少,函数首先就会判断提交的事务是不是来自applier通道,如果是则进行减少。当然如果是主库我们事务提交是前台线程自己,而不是applier通道,所以不会影响这个值。
对于主节点来讲,应该是不会存在这种值的,并且偶尔这个值还会大于1。
开始我最担心的是这个值不为1会影响节点的ONLINE,但是在查看节点上线的逻辑后,应该是没什么影响的。把对这个BUG分析了一下,发现这个和8.0.27修复的一个BUG有关。
- BUG#33067441: COUNT_TRANSACTIONS_REMOTE_IN_APPLIER_QUEUE IS NOT UPDATED DURING RECOVERY
然后提交给官方,不知道是不是不重要10天才回复,擦。
详细分析过程也可以参考BUG。当然如果有依赖这个值做的监控,可能需要稍微注意一下。
链接:https://www.jianshu.com/p/ca2849f97fb9
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




