SQL 连接数爆满(数据库连接池被打满 / Too many connections)是生产环境非常常见的问题,通常不是“某一个原因”,而是多个因素叠加。下面按最常见 → 较少见的顺序系统说明。
这是头号原因。
典型代码问题:
Connection conn = dataSource.getConnection();
// 忘记 close()
或:
cur = conn.cursor()
# 异常时没 finally / with
结果:
✅ 正确做法:
try-with-resources / with常见错误配置:
maxPoolSize = 500
后果:
✅ 经验值:
一个慢 SQL 占用连接 10 秒:
100 QPS × 10s = 1000 连接
常见慢 SQL:
SELECT *✅ 解决:
表现:
✅ 方案:
1 请求
├─ 服务A → DB
├─ 服务B → DB
└─ 服务C → DB
一个外部请求 = 多个 DB 连接
✅ 方案:
表现:
Sending dataSHOW PROCESSLIST 全是 Locked✅ 检查:
SHOW PROCESSLIST;
SELECT * FROM information_schema.innodb_trx;
SHOW VARIABLES LIKE 'max_connections';
如果:
max_connections = 150
应用池 = 300
必然爆。
wait_timeout 太大1. SHOW PROCESSLIST
2. 看是否大量 Sleep / Query
3. 查慢 SQL
4. 看连接池配置
5. 看代码是否漏 close
6. 看流量曲线
SQL 连接数爆满,90% 不是数据库的问题,而是“连接没关 + SQL 慢 + 配置乱”。
如果你愿意,可以告诉我:
我可以帮你精准定位是哪一类问题。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。