在高併發的 Web 應用中,數據庫連接的建立與銷毀頻率極高。MySQL 為了避免頻繁向操作系統申請/釋放線程資源的開銷,引入了**線程緩存池**機制,由參數 thread_cache_size 控制。正確設置該參數能顯著降低 CPU 佔用,提升連接建立速度,是 MySQL 基礎優化的「必修課」。
thread_cache_size,該線程不會被銷毀,而是被放入緩存池處於「睡眠」狀態。pthread_create() 系統調用開銷。通過 SHOW GLOBAL STATUS 觀察兩個核心計數器:
線程緩存命中率 = (1 - Threads_created / Connections) * 100%
thread_cache_size 過小,需調大。官方文檔及社區最佳實踐建議(參考原文調查):
| 服務器物理內存 | 建議 thread_cache_size | 備註 |
|---|---|---|
| 1 GB | 8 | 入門級 |
| 2 GB | 16 | |
| 4 GB | 32 | 常見生產配置 |
| 8 GB | 64 | |
| 16 GB+ | 128 - 256 | 高併發核心業務可適當調大 |
max_connections 的值,但通常無需那麼大。
FLUSH STATUS; 歸零計數器。SHOW GLOBAL STATUS LIKE 'Connections';
SHOW GLOBAL STATUS LIKE 'Threads_created';
my.cnf [mysqld] 區塊調大參數並 RELOAD 或重啟生效。Threads_created 是否幾乎不再增長。錯誤。 應用層連接池復用的是「連接對象」,但 MySQL 服務端每次新建連接仍需分配線程。thread_cache_size 是**服務端**優化,與客戶端連接池**互補**,而非替代。
每個緩存線程僅佔用棧空間 (thread_stack,默認 256KB/1MB) 和少量結構體內存。即使緩存 1000 個線程,也僅佔用 ~256MB,**遠小於 sort_buffer 等按連接分配的緩存風險**。
thread_cache_size 是**投入產出比極高**的調優參數:成本極低(極少內存),收益明顯(減少系統調用、降低延遲、平滑高峰尖刺)。**建議所有生產環境至少設置為 64 以上**,高併發核心庫設置 128-256,並通過 Threads_created/Connections 定期複核。