可以看到 , 如果 quota_size 等于 0 , do_wait 会直接返回 , 不会执行任何等待操作 。这也就是为什么当 m_quota_size 等于 0 时 , 会禁用流控操作 。
如果 quota_used 大于 quota_size 且 quota_size 不等于 0 , 则意味着当前周期的配额用完了 。这个时候 , 会调用 mysql_cond_timedwait 触发等待 。
这里的 mysql_cond_timedwait 会在两种情况下退出:
- 收到 m_flow_control_cond 信号(该信号会在 flow_control_step 函数中发出 ) 。
- 超时 。这里的超时时间是 1s 。
在等待的过程中 , 如果客户端是多线程并发写入(且单个线程的下个操作会等待上个操作完成) , 这里会等待多个事务 , 并且超额使用的事务数不会多于客户端并发线程数 。
所以 , 在上面的示例中 , 为什么 quota_used(156) 比 quota_size(146)多 10 , 这个实际上是 sysbench 并发线程数的数量 。
接下来 , 我们看看示例中这 156 个事务在 do_wait 处的等待时间 。
...0.0000200.0000170.0000230.0000730.0000230.0000180.5701800.5679990.5619160.5611620.5589300.5577140.5566830.5505810.5481020.547176
前 146 个事务的平均等待时间是 0.000035s , 后 10 个事务的平均等待时间是 0.558044s 。很显然 , 后 10 个事务是被流控了 , 最后被 flow_control_step(默认一秒执行一次)中发送的 m_flow_control_cond 信号释放的 。
流控的相关参数group_replication_flow_control_mode
是否开启流控 。默认是 QUOTA , 基于配额进行流控 。如果设置为 DISABLED , 则关闭流控 。
group_replication_flow_control_period
流控周期 。有效值 1 - 60 , 单位秒 。默认是 1 。注意 , 各个节点的流控周期应保持一致 , 否则的话 , 就会将周期较短的节点配额作为集群配额 。
看下面这个示例 , 127.0.0.1:33061 这个节点的 group_replication_flow_control_period 是 10 , 而其它两个节点的 group_replication_flow_control_period 是 1 。
2022-08-27T19:01:50.699939+08:00 63 [Note] [MY-011726] [Repl] Plugin group_replication reported: 'Flow control - update member stats: 127.0.0.1:33061 stats certifier_queue 0, applier_queue 0 certified 217069 (1860), applied 1 (0), local 217070 (1861), quota 28566 (1857) mode=1'2022-08-27T19:01:50.699955+08:00 63 [Note] [MY-011726] [Repl] Plugin group_replication reported: 'Flow control - update member stats: 127.0.0.1:33071 stats certifier_queue 0, applier_queue 2 certified 218744 (157), applied 218746 (165), local 0 (0), quota 28566 (1857) mode=1'2022-08-27T19:01:50.699967+08:00 63 [Note] [MY-011726] [Repl] Plugin group_replication reported: 'Flow control - update member stats: 127.0.0.1:33081 stats certifier_queue 16383, applier_queue 0 certified 0 (0), applied 0 (0), local 0 (0), quota 28566 (1857) mode=1'2022-08-27T19:01:50.699979+08:00 63 [Note] [MY-011727] [Repl] Plugin group_replication reported: 'Flow control: throttling to 141 commits per 10 sec, with 1 writing and 0 non-recovering members, min capacity 157, lim throttle 100'
经验总结扩展阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 2023年10月10日买猫吉日一览表 2023年10月10日适合买猫吗
- 2023年10月10日买狗黄道吉日 2023年10月10日是买狗的黄道吉日吗
- 2023年10月10日买鸡黄道吉日 2023年10月10日买鸡好吗
- 孙姓女孩名字2024年10月24日出生的生辰八字五行查询
- 2024年九月廿五出生刘姓女孩名字叫什么生辰八字五行查询
- 2023年2月10日适合买鸭吗 2023年2月10日买鸭好吗
- 2023年2月10日是买狗吉日吗 2023年2月10日买狗好不好
- 2023年2月10日买猫黄道吉日 2023年2月10日是买猫吉日吗
- 2023年2月10日买宠物行吗 2023年2月10日买宠物吉日一览表
- 2023年农历正月廿十砍树吉日 2023年2月10日砍树行吗