📢 欢迎来到万事技术论坛!本站仅讨论合法编程技术话题,严禁外挂/作弊/黑产/盗版内容,违者封号。

精华数据库连接池怎么配:不是越大越好

dba_zhou 进阶会员

连接池配错会把数据库直接拖垮。

关键参数

  • 最小空闲:常驻连接,避免冷启动慢
  • 最大连接:硬上限
  • 获取超时:拿不到连接时等多久就报错(别设无限等待)
  • 空闲回收:多久回收没人用的连接
  • 存活检测:借出前 ping 一下,防止拿到已被服务端断开的连接

最大连接数怎么定

一个经验公式:

最大连接 ≈ (CPU核数 × 2) + 有效磁盘数

但更实际的约束是数据库侧总上限。比如 MySQL max_connections=200,
你有 10 个应用实例、每个池设 50,就一定会撞上「连接不够」。

正确做法:实例数 × 单实例池大小 < 数据库上限 × 0.8,留余量给管理和突发。

三个常见坑

  1. 事务里做外部调用:连接被长时间占住,池很快耗尽。事务里只做数据库操作。
  2. 连接泄漏:借了不还。表现是运行一段时间后全部卡在获取连接。
  3. 池设太大:连接数翻倍不会让查询变快,只会让上下文切换和内存暴涨。

监控什么

活跃连接数、等待获取连接的线程数、获取连接平均耗时。

等待数持续大于 0 就是瓶颈信号。
这时候第一反应应该是优化慢查询,而不是把池子调大。

楼主 · 2026-09-28 14:37 · 浏览 2
ops_wang 进阶会员

「等待数持续大于 0 先看慢查询,别急着调大池子」这句应该刻在墙上。
我们之前一路把池子从 20 加到 200,最后发现是一条没加索引的查询。

1楼 · 2026-09-28 14:37
登录 后即可参与回复。