从字面意思看了一下是因为slave_pending_jobs_size_max默认值为16777216(16MB),但是slave接收到的slave_pending_jobs_size_max为...17085453(17M); 解决方案 从库执行如下SQL mysql>stop slave; mysql>set global slave_pending_jobs_size_max=20000000...slave_parallel_workers | 4 | +------------------------+-------+ 1 row in set (0.00sec) mysql>set global slave_pending_jobs_size_max...---------+-------+ | Variable_name | Value | +-----------------------------+-------+ |slave_pending_jobs_size_max
MySQL 的各参数的值设置需根据操作系统硬件情况,操作系统参数情况及数据库其他参数情况而进行调整,本文将结合生成环境的异常情况介绍MySQL slave_pending_jobs_size_max参数调整实践...从报错信息可以看出,是因为slave_pending_jobs_size_max的大小小于当前需要执行事件所需的内存大小。...经查看,slave_pending_jobs_size_max的大小设置的是默认值16777216(即16M),小于16777357。 2....2) 设置从库slave_pending_jobs_size_max的大小 注意,需要大于主库max_allowed_packet的大小 mysql> stop slave;Query OK, 0 rows...affected (0.01 sec) mysql> set global slave_pending_jobs_size_max=157286400;Query OK, 0 rows affected
,去看看从库的 slave_pending_jobs_size_max 值。...师爷,翻译翻译,什么叫 slave_pending_jobs_size_max ······ 在多线程副本(slave_parallel_workers > 0)上,确保系统变量 slave_pending_jobs_size_max...但 slave_pending_jobs_size_max 的值控制了副本上可用来保存传入数据包的内存。指定的内存在所有复制工作队列中共享。...因此 Slave_pending_jobs_size_max 应该设置得足够高,以适应大多数预期事件的大小。...slave_pending_jobs_size_max 可以在线全局修改,但是需要重启复制才能生效。
Replicate_Rewrite_DB: Channel_Name: Master_TLS_Version: 1 row in set (0.00 sec) 从报错信息看,和参数slave_pending_jobs_size_max...大概的意思是: 对于多线程复制,slave_pending_jobs_size_max变量设置用于保存尚未应用的event的工作队列可用的最大内存量(以字节为单位)。...划重点: 该参数在多线程复制中起作用, 当worker线程正在处理的event的总大小超过slave_pending_jobs_size_max变量的大小时,将发生此等待操作。...slave_max_allowed_packet | 1073741824 | +--------------------------+------------+ 2 rows in set (0.00 sec) 2、设置从库slave_pending_jobs_size_max...需要大于主库max_allowed_packet的大小 mysql>stop slave; Query OK, 0 rows affected (0.01 sec) mysql>set global slave_pending_jobs_size_max
-28T17:36:06.790418+08:00 34 [Note] Multi-threaded slave: Coordinator has waited 4881 times hitting slave_pending_jobs_size_max...从描述信息来看是:多复制线程(MTS): Coordinator(sql线程的协调者,其实就是sql线程自己) 已经等了4881次(每次都命中了slave_pending_jobs_size_max);...当前的event size是8205字节.这里提到了一个参数: slave_pending_jobs_size_max, 该参数是MTS场景下才生效的; 其含义是一个队列(worker queues)...验证既然触发条件我们已经知道了, 那我们可以模拟大事务或者调小slave_pending_jobs_size_max的值.....-- 从库修改slave_pending_jobs_size_max=1024并重启复制进程set global slave_pending_jobs_size_max=1024;stop slave
那么要求worker线程当前没有积压的event正在执行 如果不是big event,那么需要判断当前worker线程积压的event大小加上本次进入worker线程对列的event大小之和不能超过参数slave_pending_jobs_size_max...woker线程积压的event个数超过了 16384个event,那么进入Waiting for Slave Worker queue等待 如果协调线程发现分配的worker线程积压的event的大小超过了slave_pending_jobs_size_max...,我们知道这样的事务会形成很多8K左右的event(比如一次delete了1000W的数据),那么如果只用个数来判断那么就是积压的event大小最多达到(8K*16384=128M),实际上我们的参数slave_pending_jobs_size_max...If it is a big event (event size is greater than slave_pending_jobs_size_max but less than slave_max_allowed_packet...If it is normal event (event size is less than slave_pending_jobs_size_max), then it will wait for
Waited due to the total size:协调线程分发event大小达到replica_pending_jobs_size_max或者slave_pending_jobs_size_max...回放event大小达到replica_pending_jobs_size_max或者slave_pending_jobs_size_max的次数为0 ....回放event大小达到replica_pending_jobs_size_max或者slave_pending_jobs_size_max的次数为0 .
Bug #22671846) Replication: Multithreaded slaves could not be configured with small queue sizes using slave_pending_jobs_size_max...Any packet larger than slave_pending_jobs_size_max was rejected with the error ER_MTS_EVENT_BIGGER_PENDING_JOBS_SIZE_MAX...With this fix, slave_pending_jobs_size_max becomes a soft limit rather than a hard limit....If the size of a packet exceeds slave_pending_jobs_size_max but is less than slave_max_allowed_packet
ThreadWaiting for Slave Workers to free pending eventsWorkers正在处理的事件的总大小超过系统变量replica_pending_jobs_size_max或slave_pending_jobs_size_max
= 2000 max_allowed_packet = 1024M slave_max_allowed_packet = 1024M slave_pending_jobs_size_max
transaction-write-set-extraction OFF XXHASH64 slave_rows_search_algorithms INDEX_SCAN, TABLE_SCAN INDEX_SCAN, HASH_SCAN slave_pending_jobs_size_max
Workers to free pending events”:由所谓的 ‘big event’ 造成的,什么是 ‘big event’ 呢,源码中描述为:event size is greater than slave_pending_jobs_size_max
skip_name_resolve = 1 skip_slave_start = 1 slave_parallel_type = LOGICAL_CLOCK slave_parallel_workers = 16 slave_pending_jobs_size_max
= 1 relay_log = /service/databases/mysql_3306/data/relay-bin slave_pending_jobs_size_max
enhanced multi-threaded slave其实很简单,只需根据如下设置: slave-parallel-type=LOGICAL_CLOCK slave-parallel-workers=16 slave_pending_jobs_size_max
replica_pending_jobs_size_max或slave_pending_jobs_size_max的默认设置为 128M,是max_allowed_packet系统变量的默认设置值 64M...然而,replica_pending_jobs_size_max或slave_pending_jobs_size_max的值控制了复制端可用于保存传入数据包的内存。...replica_pending_jobs_size_max或slave_pending_jobs_size_max的值是一个软限制,如果一个异常大的事件(由一个或多个数据包组成)超过了这个大小,事务将被暂停...因此,虽然大于replica_pending_jobs_size_max或slave_pending_jobs_size_max的异常事件可以被处理,但清空所有副本工作者队列和等待排队后续事务的延迟可能导致副本延迟和副本工作者并发性降低...因此,replica_pending_jobs_size_max或slave_pending_jobs_size_max应设置为足够高,以容纳大多数预期事件大小。
slave_pending_jobs_size_max: 持有尚未应用的事件的复制工作者队列的最大大小。在 MySQL 8.0.26 中已弃用。