连接池和max_connections有什么区别?
What is the difference between connection pooling and max_connections?
我正在使用带有 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
中取出 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
降低池上的空闲超时是否有助于更快地释放连接?
是的,这绝对有帮助,但在这种情况下不是完美的解决方案。
可能的原因!!
- 有时,可能会发生连接泄漏,然后数据库可能会获得比平时多 10 倍的连接数。
- 还有一个常见的问题是客户端应用程序崩溃并保持连接打开,然后在重新启动时打开新的连接
还有,你检查过superuser_reserved_connections
变量值了吗,请看这个post,这可能对你有帮助!!
您使用 Heroku 进行连接池吗?
我正在使用带有 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
中取出 1 个计数? - 这是否意味着池最大值必须始终小于
max_connections
? - 降低池的空闲超时是否有助于更快地释放连接?
下面的查询将帮助您找出为什么有这么多连接
SELECT * FROM pg_stat_activity
总的来说,池与 max_connections 有什么关系?
池中的最大值表示您在池中设置的连接数。在 postgresql 中,max_connections
是您在数据库服务器中设置的连接数。因此,您池中的每个连接都从 max_connections
设置max_connections
为26太低了,建议您提高设置值。
池中的每个连接是否从 max_connections 中取出 1 个计数?
是的,每个连接取出1个计数。
这是否意味着池最大值必须始终小于 max_connections?
是的,池最大值必须始终小于 max_connections
降低池上的空闲超时是否有助于更快地释放连接?
是的,这绝对有帮助,但在这种情况下不是完美的解决方案。
可能的原因!!
- 有时,可能会发生连接泄漏,然后数据库可能会获得比平时多 10 倍的连接数。
- 还有一个常见的问题是客户端应用程序崩溃并保持连接打开,然后在重新启动时打开新的连接
还有,你检查过superuser_reserved_connections
变量值了吗,请看这个post,这可能对你有帮助!!
您使用 Heroku 进行连接池吗?