我正在使用 Postgresql 后端在 Heroku 上开发一个应用程序。在尝试从 CLI 和在服务器上加载页面时,我会定期收到此错误消息:
psql: FATAL: remaining connection slots are reserved for non-replication superuser connections
任何人以前见过这个或请帮助我指出正确的方向?
我正在使用 Postgresql 后端在 Heroku 上开发一个应用程序。在尝试从 CLI 和在服务器上加载页面时,我会定期收到此错误消息:
psql: FATAL: remaining connection slots are reserved for non-replication superuser connections
任何人以前见过这个或请帮助我指出正确的方向?
您要么需要增加max_connections
配置设置,要么(可能更好)使用连接池通过较小的连接池路由大量用户请求。
https://wiki.postgresql.org/wiki/Number_Of_Database_Connections
当我忘记关闭连接时发生此异常
我实际上尝试使用以下方法在 django 端实现连接池:
https://github.com/gmcguire/django-db-pool
但我仍然收到此错误,尽管将可用连接数降低到低于 20 个打开连接的标准开发数据库配额。
这里有一篇关于如何将您的 postgresql 数据库移动到 Amazon RDS 的免费/廉价层的文章。这将允许您设置max_connections
更高。这也将允许您使用 PGBouncer 在数据库级别池连接。
https://www.lewagon.com/blog/how-to-migrate-heroku-postgres-database-to-amazon-rds
更新:
Heroku 回复了我的公开票,并表示我的数据库在他们的网络中负载平衡不正确。他们说,改进他们的系统应该可以防止将来出现类似的问题。尽管如此,支持手动重定位我的数据库和性能显着提高。
要在 Linux 中重现相同的问题:
for i in {1..300}; do
PGPASSWORD=MY_PASSWORD gnome-terminal -e $'/usr/bin/psql -h \'127.0.0.1\' -p 5432 -U MY_USERNAME'
done
在 dotnet 客户端中,您可以阅读:
System.InvalidOperationException: An exception has been raised that is likely due to a transient failure. ---> Npgsql.PostgresException (0x80004005): 53300: sorry, too many clients already
该错误消息意味着该应用程序已用完所有可用连接。
在aws中使用带有knex和typescript的postgres进行一些查询和更新工作时,当它完成390个数据库操作时会弹出问题,错误会阻止正常的knex.destroy()操作。错误信息是:
(节点:66236)UnhandledPromiseRejectionWarning:错误:剩余的连接槽保留用于非复制超级用户连接
当 knex.destroy() 转到正确的位置时,错误就消失了。
在我的情况下,我有很多空闲连接,所以我必须在创建新连接之前重用空闲连接,