Plainnotes

数据库连接数打满,加机器之前先看这个

2025-07-23 · 3 分钟部署

应用报 too many connections,第一反应是调大 max_connections。但连接数打满通常有三个更根本的原因。

一,连接池开太大。每个应用实例 20 个连接,10 个实例就是 200,数据库根本吃不消。总连接数应该按数据库核数估:connections ≈ cores * 2 + spindles,再留余量。

二,慢查询占着连接不放。看 pg_stat_activity 里 state = 'active' 且 query_start 很早的会话。

三,idle in transaction。应用开了事务却去调外部接口,事务一直挂着,连接被占住还持有锁。这个最隐蔽,也最伤。

处理顺序:先杀长事务,再看慢查询,最后才考虑调参数。直接调大 max_connections 会让每个连接的内存开销叠加,可能把数据库拖垮。