InnoDB 後台線程架構演進中,Purge 線程獨立化 是 5.6 版本的關鍵優化。本文梳理 innodb_purge_threads 參數演進、Master Thread 職責變更、配置調優建議。
| 參數 | 默認值 | 取值範圍 | 說明 |
|---|---|---|---|
innodb_purge_threads | 1 (5.6.5+) | 1 ~ 32 | Purge 專用後台線程數 |
innodb_purge_batch_size | 300 | 1 ~ 5000 | 每次 Purge 批量處理 Undo 頁數 |
innodb_max_purge_lag | 0 | 0 ~ 4294967295 | Purge 滯後閾值,超過則延遲 DML |
innodb_max_purge_lag_delay | 0 | 0 ~ 10000000 | 最大延遲微秒數(5.6.6+) |
SHOW ENGINE INNODB STATUS\G -- 關注 "History list length" (Undo 積壓長度) -- "Purge done for" 進度
innodb_purge_threads(如 4~8)、適當調大 innodb_purge_batch_size。innodb_purge_threads = 4 起步,配合 innodb_max_purge_lag=100000 觸發背壓保護。# 典型高寫入配置片段 [mysqld] innodb_purge_threads = 4 innodb_purge_batch_size = 1000 innodb_max_purge_lag = 100000 innodb_max_purge_lag_delay = 500000 innodb_undo_log_truncate = ON # 5.7+ 支援 Undo 表空間自動截斷 innodb_undo_tablespaces = 4 # 獨立 Undo 表空間數
innodb_purge_threads 將 Purge 從 Master Thread 解耦,是 InnoDB 向多核擴展的關鍵一步。通過 History list length 監控 Purge 追趕能力,按業務寫入模式動態調整線程數與批次大小,可有效避免 Undo 膨脹導致的表空間暴增與查詢性能抖動。