PostgreSQL 将连接数限制为少于max_connections?

PostgreSQL 将连接数限制为少于max_connections?

我有一台 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

答案2

您是否可能限制了最大用户连接数?角色权限

你可以用以下方法改变它

改变角色角色名称连接限制300;

相关内容