[mysql] [note] mysql 报错 Multi-threaded slave 。。。。
mysql版本:5.7.30
报错1:
2021-01-24T19:16:33.731787Z 59 [Note] Multi-threaded slave: Coordinator has waited 15460741 times hitting slave_pending_jobs_size_max; current event size = 7412.
2021-01-24T19:16:33.735367Z 59 [Note] Multi-threaded slave: Coordinator has waited 15460751 times hitting slave_pending_jobs_size_max; current event size = 61977.
2021-01-24T19:16:33.738231Z 59 [Note] Multi-threaded slave: Coordinator has waited 15460761 times hitting slave_pending_jobs_size_max; current event size = 7530.
2021-01-24T19:16:33.740698Z 59 [Note] Multi-threaded slave: Coordinator has waited 15460771 times hitting slave_pending_jobs_size_max; current event size = 61925.
2021-01-24T19:16:33.742858Z 59 [Note] Multi-threaded slave: Coordinator has waited 15460781 times hitting slave_pending_jobs_size_max; current event size = 8011.
2021-01-24T19:16:33.745443Z 59 [Note] Multi-threaded slave: Coordinator has waited 15460791 times hitting slave_pending_jobs_size_max; current event size = 7132.
官方资料:
bug连接:
https://bugs.mysql.com/bug.php?id=68462
建议:
can you try to increase the size of slave-pending-jobs-size-max
(possibly to a big value, just for testing)? Do you still see the
same issue?
Fixed in 5.6+. Documented as follows in the 5.6.12 and 5.7.2 changelogs:
When the size of an execution event exceeded the maximum set for
the buffer (slave_pending_jobs_size_max), row-based replication
could hang with -Waiting for slave workers to free pending
events-.
Closed.
报错2:
2021-01-25T08:14:08.576904Z 17 [Note] Multi-threaded slave statistics for channel '': seconds elapsed = 124; events assigned = 861563905; worker queues filled over overrun level = 0; waited due a Worker queue full = 0; waited due the total size = 7620899; waited at clock conflicts = 31110447234200 waited (count) when Workers occupied = 12744756 waited when Workers occupied = 8278252000
2021-01-25T08:16:08.273207Z 17 [Note] Multi-threaded slave statistics for channel '': seconds elapsed = 120; events assigned = 861577217; worker queues filled over overrun level = 0; waited due a Worker queue full = 0; waited due the total size = 7620899; waited at clock conflicts = 31111352323200 waited (count) when Workers occupied = 12744756 waited when Workers occupied = 8278252000
2021-01-25T08:18:10.190863Z 17 [Note] Multi-threaded slave statistics for channel '': seconds elapsed = 122; events assigned = 861590529; worker queues filled over overrun level = 0; waited due a Worker queue full = 0; waited due the total size = 7620899; waited at clock conflicts = 31112325614500 waited (count) when Workers occupied = 12744756 waited when Workers occupied = 8278252000
2021-01-25T08:20:10.052990Z 17 [Note] Multi-threaded slave statistics for channel '': seconds elapsed = 120; events assigned = 861608961; worker queues filled over overrun level = 0; waited due a Worker queue full = 0; waited due the total size = 7620899; waited at clock conflicts = 31113614922300 waited (count) when Workers occupied = 12744756 waited when Workers occupied = 8278252000
2021-01-25T08:22:16.867137Z 17 [Note] Multi-threaded slave statistics for channel '': seconds elapsed = 126; events assigned = 861625345; worker queues filled over overrun level = 0; waited due a Worker queue full = 0; waited due the total size = 7620899; waited at clock conflicts = 31115474030700 waited (count) when Workers occupied = 12744756 waited when Workers occupied = 8278252000
2021-01-25T08:24:21.032877Z 17 [Note] Multi-threaded slave statistics for channel '': seconds elapsed = 125; events assigned = 861643777; worker queues filled over overrun level = 0; waited due a Worker queue full = 0; waited due the total size = 7620899; waited at clock conflicts = 31117365516100 waited (count) when Workers occupied = 12744756 waited when Workers occupied = 8278252000
错误日志出现上述提示信息是因为启用了MTS(Multi-threaded slave)需要启用slave_parallel_workers参数(默认值为0,最大值为1024),并且log_warning参数要大于1
(该参数将于v8.0.3去除,被log_error_verbosity 替代),在error_log里面会有上述提示。
mysql> show variables like 'slave_parallel_workers';
+------------------------+-------+
| Variable_name | Value |
+------------------------+-------+
| slave_parallel_workers | 4 |
+------------------------+-------+
1 row in set (0.01 sec)
2021-01-25T08:24:21.032877Z 17 [Note] Multi-threaded slave statistics for channel '':
seconds elapsed = 125; --上一次统计跟这一次统计的时间间隔
events assigned = 861643777; --总共有多少event被分配执行,计总数
worker queues filled over overrun level = 0; --多线程同步中,worker 的私有队列长度超长的次数,计总数
waited due a Worker queue full = 0;
waited due the total size = 7620899;
waited at clock conflicts = 31117365516100 waited (count) when Workers occupied = 12744756 waited when Workers occupied = 8278252000
seconds elapsed: 上一次统计跟这一次统计的时间间隔;
events assigned: 总共有多少event被分配执行;
worker queues filled over overrun level:mts在所有的并行workers之间倾向于加载平衡的时间。slave_parrllel_workers参数决定workers数量。这个统计参数显示了当前线程承受的饱和等级。
如果以一个并行线程序列趋近与饱和,这个数会递增,线程复制时间会被推迟,避免达到线程序列限制。
Waited due to a Worker queue full: 因为worker队列爆满,协调线程必须等待该统计参数会增长
Waited due to the total size: 该参数代表因为达到了可用内存的限制,worker队列持有未应用事件造成协调线程睡眠的次数。
如果这个值持续增长,需要增大slave_pending_jobs_size_max值来避免协调线程等待时间。
slave_pending_jobs_size_max: 此变量代表用于保存尚未应用的事件的从worker队列的最大内存量(以字节为单位),如果没有启动mts,修改该参数不会有任何效果。
(v8.0.11之前默认值为16M,v8.0.12默认值为128M,最小值为1024,最大值为16eib)
Waited at clock conflicts: 在事务之间存在依赖的情况下,该参数显示等待时间相当于冲突检测和解决方案的逻辑时间。
Waited (count) when used occupied: 协调进程监控worker足额(enough)分配的统计次数。enough定义取决于调度类型(基于每个库和时钟)
解决方案:
1.调大slave_pending_jobs_size_max值
show variables like 'slave_pending%';
+-----------------------------+----------+
| Variable_name | Value |
+-----------------------------+----------+
| slave_pending_jobs_size_max | 16777216 |
+-----------------------------+----------+
1 row in set (0.00 sec)
set global slave_pending_jobs_size_max=16777216*16;
show variables like 'slave_pending%';
+-----------------------------+-----------+
| Variable_name | Value |
+-----------------------------+-----------+
| slave_pending_jobs_size_max | 268435456 |
+-----------------------------+-----------+
1 row in set (0.00 sec)
- 点赞
- 收藏
- 关注作者
评论(0)