預設 innodb_thread_concurrency = 0(無限制),高並發下易導致 CPU 爭搶。建議先設為 16 或 64,觀察負載再微調:
SET GLOBAL innodb_thread_concurrency = 16;
持久化請寫入 my.cnf:innodb_thread_concurrency = 16。
Windows (my.ini) / Linux (my.cnf):
max_connections = 1000
修改後重啟服務生效。也可線上動態調整(無需重啟):
SET GLOBAL max_connections = 1000;
防止單一應用佔盡連接導致整庫不可用:
SET GLOBAL max_user_connections = 500;
建議配合連接池使用,避免應用端頻繁建立連接。
監控工具頻繁讀取 information_schema 會觸發統計更新,造成 I/O 激增:
SET GLOBAL innodb_stats_on_metadata = 0;
持久化:innodb_stats_on_metadata = 0。慢查詢中出現 information_schema 表時也建議關閉。
若配置檔上限仍不夠,需重新編譯 MySQL。以 CentOS 4.4 + MySQL 5.0.33 為例:
vi /usr/local/mysql/bin/mysqld_safe
# 找到 mysqld 啟動行,在後面加上:
-O max_connections=1500
# 重啟驗證
service mysqld restart
mysqladmin -uroot -p variables | grep max_connections
# 查看當前最大連接數
SHOW VARIABLES LIKE 'max_connections';
# 查看當前連線狀態
SHOW PROCESSLIST;
# 查看狀態計數器
SHOW STATUS LIKE 'Threads_connected';
# 客戶端查看變數
mysqladmin -uroot -p variables
連接數如食堂打飯窗口:預設 1 個窗口(100 連接),突發 100 人排隊會亂。適當限流(max_user_connections)並增加窗口(max_connections),再配合排隊機制(連接池),才能高效服務。
按「調並發 → 擴上限 → 限單用戶 → 關無用統計 → 必要時重編譯」順序逐步調優,並持續監控 Threads_connected、Aborted_connects 等指標,即可穩健支撐高並發連接。