| 語言/框架 | 推薦池 | 關鍵配置 |
| Java (HikariCP) | HikariCP | maximumPoolSize=20, minimumIdle=5, idleTimeout=300000, maxLifetime=1800000, connectionTimeout=30000, leakDetectionThreshold=60000 |
| Go (database/sql) | 內建池 | db.SetMaxOpenConns(20), db.SetMaxIdleConns(5), db.SetConnMaxLifetime(30*time.Minute), db.SetConnMaxIdleTime(5*time.Minute) |
| Python (SQLAlchemy) | QueuePool | pool_size=10, max_overflow=10, pool_timeout=30, pool_recycle=1800, pool_pre_ping=True |
| PHP (PDO) | 無內建池 (需 Swoole/Workerman/ProxySQL) | 短連接模式:每請求新建+關閉;長連接模式:持久連接 + 定期 ping 保活 |
| Node.js (mysql2) | PromisePool | waitForConnections=true, connectionLimit=20, queueLimit=0 |
六、中間件分流:ProxySQL (推薦)
-- ProxySQL 配置片段
mysql_servers:
- hostgroup=10, hostname=10.0.1.10, port=3306, max_connections=2000
- hostgroup=10, hostname=10.0.1.11, port=3306, max_connections=2000
mysql_users:
- username=app_user, password=xxx, default_hostgroup=10, max_connections=3000
global_variables:
mysql-max_connections=5000
mysql-thread_cache_size=100
ProxySQL 實現連接多路複用、讀寫分離、查詢重寫、熔斷限流、審計日志,是解決「連接數過多」的終極武器。
七、監控告警體系
# Prometheus 告警規則
- alert: MySQLConnectionsHigh
expr: mysql_global_status_threads_connected / mysql_global_variables_max_connections > 0.8
for: 2m
labels:
severity: warning
annotations:
summary: "MySQL 連接數超過 80%"
- alert: MySQLConnectionsCritical
expr: mysql_global_status_threads_connected / mysql_global_variables_max_connections > 0.95
for: 1m
labels:
severity: critical
annotations:
summary: "MySQL 連接數即將耗盡"
# 關鍵圖表
- Threads_connected 趨勢圖
- Connection_errors_max_connections 計數器
- Sleep 連接數佔比
- 活躍連接來源 IP 分布
八、總結
MySQL 連接數過多本質是資源有限與需求無限的矛盾。治理路徑:
1. **應急擴容**:SET GLOBAL max_connections + 修改配置。
2. **源頭治理**:連接池科學配置 + 洩漏代碼修復 + 睡眠連接清理。
3. **架構分流**:ProxySQL 多路複用 + 讀寫分離 + 限流熔斷。
4. **監控閉環**:連接數水位告警 + 來源分析 + 容量規劃。
記住:**連接是昂貴資源,池化複用是鐵律,監控告警是底線。**
- 上一篇文章: Heartbeat 2.0.3 + MySQL 5.0.18 高可用集群部署實戰 (RedHat Linux 9)
- 下一篇文章: FreeBSD/Linux 下 MySQL 源碼編譯安裝與二進制包部署完整指南
Copyright ©
程式碼之家 All Rights Reserved