数据库连接瓶颈

数据库连接数是稀缺资源:单实例可承载连接有限,应用实例扩张会成倍放大连接需求;用连接池收敛、代理层复用与请求准入控制管理连接数。

问题N 个应用实例 × 池大小 M = 总连接数,易超限
手段数据库代理复用连接;池内收敛空闲连接
配套慢查询与长事务会长期占用连接,需一并治理

连接数放大测算(示例)

层实例数单实例池总连接
应用直连2020400
扩容后直连4020800
经数据库代理复用40池化收敛约 100–200
  • 先核算 max_connections 与单连接内存开销,再决定扩容上限
  • 代理层(如 PgBouncer)按事务或语句模式复用后端连接
  • 长事务与告警连接按来源统计,防止池被少数调用方耗尽
  • 扩容应用实例前按倍数换算数据库连接需求并预留余量
连接数告警要区分活跃与空闲:只看总量会把池预热误判为异常。

易错点

  • 每扩容一次应用实例,数据库连接数同步翻倍
  • 长事务占用连接,高峰期连接池耗尽

数据来源与参考

  • PostgreSQL 文档:连接管理与 PgBouncer
  • HikariCP 文档:About Pool Sizing
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌