连接池配错会把数据库直接拖垮。
关键参数
- 最小空闲:常驻连接,避免冷启动慢
- 最大连接:硬上限
- 获取超时:拿不到连接时等多久就报错(别设无限等待)
- 空闲回收:多久回收没人用的连接
- 存活检测:借出前 ping 一下,防止拿到已被服务端断开的连接
最大连接数怎么定
一个经验公式:
最大连接 ≈ (CPU核数 × 2) + 有效磁盘数
但更实际的约束是数据库侧总上限。比如 MySQL max_connections=200,
你有 10 个应用实例、每个池设 50,就一定会撞上「连接不够」。
正确做法:实例数 × 单实例池大小 < 数据库上限 × 0.8,留余量给管理和突发。
三个常见坑
- 事务里做外部调用:连接被长时间占住,池很快耗尽。事务里只做数据库操作。
- 连接泄漏:借了不还。表现是运行一段时间后全部卡在获取连接。
- 池设太大:连接数翻倍不会让查询变快,只会让上下文切换和内存暴涨。
监控什么
活跃连接数、等待获取连接的线程数、获取连接平均耗时。
等待数持续大于 0 就是瓶颈信号。
这时候第一反应应该是优化慢查询,而不是把池子调大。
楼主 · 2026-09-28 14:37 · 浏览 2

