ERROR 1040 (HY000): Too many connections
當前活躍連接數達到 max_connections 上限(默認 151),新連接被拒絕。
mysql> SET GLOBAL max_connections = 3000;
mysql> SET GLOBAL wait_timeout = 30;
動態修改**無需重啟**,僅對新連接生效。但重啟後失效,**必須同步修改配置文件**。
[mysqld]
max_connections = 3000
wait_timeout = 30
interactive_timeout = 30
max_user_connections = 2000 # 單用戶上限,防單用戶佔滿
修改後 systemctl restart mysqld 生效。
-- 當前連接數
SHOW STATUS LIKE 'Threads_connected';
-- 歷史最大連接數
SHOW STATUS LIKE 'Max_used_connections';
-- 配置上限
SHOW VARIABLES LIKE 'max_connections';
| 問題 | 表現 | 修正 |
|---|---|---|
| 最大連接數過大 | 池大小 > max_connections | 池大小 ≤ max_connections * 0.8 |
| 最小閒置連接過多 | 長期佔用大量空閒連接 | minIdle 設置較小,maxIdle 控制上限 |
| 未正確關閉連接 | 泄漏導致連接不可復用 | 代碼審查、finally 塊關閉、用 try-with-resources |
| 長事務持有連接 | 事務未提交/回滾 | 拆分長事務、設置連接借用超時 |
SHOW PROCESSLIST 觀察 Time 列大、State 為 Sending data/LockedSHOW PROCESSLIST WHERE Command = 'Sleep' AND Time > 60;
治理:降低 wait_timeout、連接池設置 validationQuery、testOnBorrow、evictionPolicy 清理空閒連接。
# 關鍵指標
Threads_connected / max_connections > 0.8 → 告警
Aborted_connects 突增 → 告警
Threads_running 高位持續 → 慢查詢排查
Too many connections 表象是連接數上限,本質是**連接使用效率低**或**並發超出架構承載**。治理路徑:**動態擴容救急 → 配置文件固化 → 連接池優化 → 慢查詢治理 → 架構演進(讀寫分離/分庫分表/緩存)**。建立連接數水位監控,預留 20% 紅線空間,從容應對流量洪峰。