gpt4 book ai didi

database - 连接池和 max_connections 有什么区别?

转载 作者:太空狗 更新时间:2023-10-30 01:55:54 27 4
gpt4 key购买 nike

我正在使用带有 Sequelize 的 Postgres作为 ORM/查询接口(interface)。最近我们开始遇到一些错误:

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 中取 1 个计数?
  • 这是否意味着池最大值必须始终小于 max_connections
  • 降低池中的空闲超时是否有助于更快地释放连接?

最佳答案

下面的查询将帮助您找出为什么有这么多连接

SELECT * FROM pg_stat_activity

一般来说,池与 max_connections 有什么关系?

池中的最大值表示您在池中设置的连接数。在 postgresql 中,max_connections 是您在数据库服务器中设置的连接数。因此,您池中的每个连接都从 max_connections

中取出 1 个值

max_connections设置为26太低了,我建议你增加设置值。

池中的每个连接是否都从 max_connections 中取出 1 个计数?

是的,每个连接都取 1 个计数。

这是否意味着池最大值必须始终小于 max_connections?

是的,池最大值必须始终小于 max_connections

降低池中的空闲超时是否有助于更快地释放连接?

是的,这绝对有帮助,但在这种情况下不是完美的解决方案。

可能的原因!!

  1. 有时,可能会出现连接泄漏,然后数据库可能会获得比平时多 10 倍的连接数。
  2. 还有一个常见的问题是客户端应用程序崩溃并保持连接打开,然后在重新启动时打开新的连接

此外,您是否检查了superuser_reserved_connections 变量值,请参阅post ,这可能对你有帮助!!

您是否使用 Heroku 进行连接池?

A bit more detailed explanation here

关于database - 连接池和 max_connections 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39176419/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com