我有一台 PostgreSQL 9.4 服务器,它似乎将连接数限制为少于我在 max_connections 中定义的值。
我将 max_connections 设置为 300。
SHOW max_connections;
max_connections
-----------------
300
然而,我发现,当我的活动连接数达到 100 时,新连接就会开始超时,这是通过SELECT count(*) from pg_stat_activity;
只要该数字低于 100,新连接就可以正常工作。一旦达到 100,新连接就会失败:PG::ConnectionBad: could not connect to server: Connection timed out
(Ruby pg 库)
超级用户连接似乎有一个例外(即我通过 PgAdmin 连接),因为我可以通过这种方式超过 100 的阈值,尽管不使用超级用户的应用程序会继续超时。
我不知道到底是什么根本原因。
一些配置设置:
max_connections = 300
superuser_reserved_connections = 2
shared_buffers = 1024MB
effective_cache_size = 2048MB
work_mem = 8MB
maintenance_work_mem = 256MB
我尝试对这些值进行一些修改,但没有任何效果。
其他详情:
- Ubuntu 14.04 64 位
- 4GB Linode VPS
- PostgreSQL 9.4.1
- 在 PostgreSQL 9.2 上基本相同的配置没有出现这个问题。
- 数据库通过 pg_dumpall 从 Postgres 9.2 迁移
- 内存使用似乎不是问题,
free
显示可用内存为 2.1 GB,包括缓冲区/缓存在内为 3.5 GB。 - 这些连接用于连接许多不同的角色和许多不同的数据库,单个数据库的活动连接数不超过 5 或 6 个,每个数据库都由其各自的角色访问。似乎没有违反单个数据库或角色的连接限制。
答案1
您是否也增加了内核最大段大小?
尝试:
sysctl -w kernel.shmmax=1258291200