我使用带Sequelize的Postgres作为ORM /查询界面。最近我们开始遇到一些错误:
SequelizeConnectionError: remaining connection slots are reserved for non-replication superuser connections
调查一下,这个问题似乎与为Postgres设置的连接限制有关,但我在弄清楚如何将客户端池设置与Postgres设置联系起来时遇到了一些麻烦:
在我的postgres 9.4数据库(在Amazon RDS上),我的max_connections
默认为26:
SELECT name, setting FROM pg_settings WHERE name='max_connections';
+-----------------+---------+
| name | setting |
+-----------------+---------+
| max_connections | 26 |
+-----------------+---------+
在Sequelize中,我将我的游泳池设置为:
pool: {
max: 10,
min: 0,
idle: 10000
},
有些问题:
max_connections
的关系如何?max_connections
?max_connections
?答案 0 :(得分:3)
以下查询将帮助您找出有这么多连接的原因
SELECT * FROM pg_stat_activity
一般来说,游泳池与max_connections的关系如何?
池中的最大值表示您在池中设置的连接数。在postgresql中,max_connections
是您在数据库服务器中设置的连接数。因此,您的池中的每个连接都会从max_connections
将max_connections
设置为26非常低,我建议您增加设定值。
池中的每个连接是否从max_connections中获取1个计数?
是的,每个连接都需要1次计数。
这是否意味着游泳池最大值必须始终小于max_connections?
是的,pool max必须始终小于max_connections
降低池上的空闲超时会更快地帮助免费连接吗?
是的,这肯定有帮助,但在这种情况下不是完美的解决方案。
可能的原因!!
另外,您是否检查了superuser_reserved_connections
变量值,请参阅此post,这可能对您有所帮助!!
您是否使用heroku进行连接池?