關鍵配置參數
| 參數 | 說明 | 調優建議 |
thread_cache_size | 線程緩存池大小(預設 8) | 對比 Threads_created 與 Connections,若創建率高則調大,目標命中率 > 90% |
thread_stack | 每線程棧大小(預設 192KB) | 複雜存儲過程/深度遞歸需調大,如 256KB/512KB,避免棧溢位 |
thread_handling | 線程模型:one-thread-per-connection(預設)或 no-threads(單線程除錯) | 生產環境保持預設;連接池中介軟體可考慮 pool-of-threads(需插件支援) |
核心監控指標(SHOW GLOBAL STATUS)
| 指標 | 含義 | 健康閾值 |
Threads_connected | 當前活躍連接數 | 視 max_connections 而定,保留 10-20% 餘量 |
Threads_running | 非 Sleep 狀態執行中線程數 | 持續接近 CPU 核心數說明高負載 |
Threads_created | 歷史累計創建線程數 | 增長過快 → thread_cache_size 過小 |
Threads_cached | 當前緩存池中空閒線程數 | 應 > 0,理想接近 thread_cache_size |
命中率計算與調優動作
Thread Cache Miss Rate = Threads_created / Connections
-- 目標 < 10% (即命中率 > 90%)
-- 若 Miss Rate 高:
SET GLOBAL thread_cache_size = 64; -- 視併發峰值調整
-- 永久生效寫入 my.cnf [mysqld] 區段
線程模型演進
- 傳統
one-thread-per-connection:簡單穩定,但高併發(>5000)時上下文切換開銷大。
- Percona/ MariaDB
thread_pool 插件:固定工作線程池,請求排隊調度,大幅降低高併發延遲抖動。
- MySQL 8.0 原生支援
thread_pool 插件(Enterprise 版),社區版可用 Percona Server 替代。