MySQL 參數slave_pending_jobs_size_max設置


今天生產環境上從庫出現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。

異常處理步驟如下:

1.查看主庫max_allowed_packet的大小;

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

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

 

Tips:

slave_pending_jobs_size_max的用途:
在多線程復制時,在隊列中Pending的事件所占用的最大內存,默認為16M,如果內存富余,或者延遲較大時,可以適當調大;注意這個值要比主庫的max_allowed_packet大
 

 

耿小廚已開通個人微信公眾號,想進一步溝通或想了解其他文章的同學可以關注我

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM