njp·notes sqlite://notes.db
连接 · 2026-09-14

连接池的 size 设多大,一个反直觉的答案

直觉是池越大吞吐越高。实际测试里,把池从 100 降到 20,吞吐反而上升,p99 明显下降。原因是数据库侧的并行能力有限,超过之后连接之间争抢 CPU 和锁,切换成本超过了并行收益。

一个经验公式是 连接数 ≈ 核数 × 2 + 有效磁盘数。对 4 核的机器,10–12 个连接通常就够了,剩下的应该在应用侧排队。

关键是排队要有上限和超时。无上限的等待队列会让故障从「数据库慢」变成「应用全挂」,因为请求堆积到内存耗尽。

另外要注意池的分层:应用连 PgBouncer,PgBouncer 连数据库。两层都按大池配,等于没配。真正需要限制的是最内层。

← back to rows