MySQL 参数调整实践之slave_pending_jobs_size_max篇

MySQL 的各参数的值设置需根据操作系统硬件情况,操作系统参数情况及数据库其他参数情况而进行调整,本文将结合生成环境的异常情况介绍MySQL slave_pending_jobs_size_max参数调整实践。

1. 异常描述

之前负责的生产环境上从库出现SQL进程停止的异常,错误信息如下:

             Slave_IO_Running: Yes
            Slave_SQL_Running: No
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 1864
                   Last_Error: Cannot schedule event Write_rows, relay-log name ./mysql-relay-bin.001304, position 416228895 to Worker thread because its size 16777357 exceeds 16777216 of slave_pending_jobs_size_max.
从报错信息可以看出,是因为slave_pending_jobs_size_max的大小小于当前需要执行事件所需的内存大小。经查看,slave_pending_jobs_size_max的大小设置的是默认值16777216(即16M),小于16777357。

2. 异常处理步骤如下

1)查看主库max_allowed_packet的大小

mysql> show variables like 'max_allowed_packet';  -- 134217728 即128M+--------------------+-----------+| Variable_name      | Value     |+--------------------+-----------+| max_allowed_packet | 134217728 |+--------------------+-----------+


MySQL 参数调整实践之slave_pending_jobs_size_max篇_第1张图片

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 (0.00 sec)


mysql> start slave;
Query OK, 0 rows affected (0.05 sec)

3) 处理完毕检查一下主从同步情况

mysql> show slave status\G

MySQL 参数调整实践之slave_pending_jobs_size_max篇_第2张图片

Tips:
slave_pending_jobs_size_max的用途:
在多线程复制时,在队列中Pending的事件所占用的最大内存,默认为16M,如果内存富余,或者延迟较大时,可以适当调大;注意这个值要比主库的max_allowed_packet大

想进一步沟通或想了解其他文章的同学可以关注我

精彩推荐:

1. MySQL不停地自动重启怎么办

2. 升级python,就是这么简单

3. MySQL里trx_mysql_thread_id为0 的事务导致大量锁等待超时该咋整

4. mysql8.0新增用户及加密规则修改的那些事

你可能感兴趣的:(MySQL 参数调整实践之slave_pending_jobs_size_max篇)