首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 主從複制錯誤 1864 解決:slave_pending_jobs_size_max 調整

     編輯:MySQL 綜合教學

MySQL 主從複制錯誤 1864 解決:slave_pending_jobs_size_max 調整

多執行緒複制 (MTS) 環境下,從庫報錯 Last_SQL_Errno: 1864,訊息顯示事件大小超過 slave_pending_jobs_size_max 預設值 (16MB)。

錯誤訊息範例

Last_SQL_Error: Cannot schedule event Update_rows, relay-log name ./HE1-relay-bin.000005, position 494 to Worker thread because its size 8200 exceeds 1024 of slave_pending_jobs_size_max.

即時解決 (動態調整,無需重啟)

STOP SLAVE;
SET GLOBAL slave_pending_jobs_size_max = 20000000;  -- 20MB
START SLAVE;

參數說明

參數預設值建議調整
slave_pending_jobs_size_max16777216 (16MB)佇列中待處理事件最大記憶體,視主庫大交易調整
max_allowed_packet4MB/64MB必須大於 slave_pending_jobs_size_max
slave_parallel_workers0 (單執行緒)>0 啟用 MTS,如 4, 8, 16

故障重現測試

-- 從庫設定極小值觸發錯誤
SET GLOBAL slave_parallel_workers = 4;
SET GLOBAL slave_pending_jobs_size_max = 1024;  -- 1KB

-- 主庫大交易
SET GLOBAL max_binlog_cache_size = 8388608000000;
BEGIN;
UPDATE erp_mkpf SET usnam='測試1864錯誤';  -- 7萬行
COMMIT;

-- 從庫報錯
SHOW SLAVE STATUS\G
-- Last_SQL_Errno: 1864
-- Last_SQL_Error: Cannot schedule event Update_rows ... size 8200 exceeds 1024

最佳實務

  • 監控 SHOW SLAVE STATUS 中 Slave_pending_jobs_size_max 相關指標
  • 主庫大交易拆分,避免單一事件過大
  • slave_pending_jobs_size_max 設為 max_allowed_packet 的 2-4 倍
  • MariaDB/MySQL 5.7+ 可用 slave_parallel_mode=optimistic 提升並行度
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved