我正在使用Postgresql后端在Heroku上开发一个应用程序。在尝试访问数据库时,我会定期从CLI和加载服务器上的页面时收到此错误消息:
psql: FATAL: remaining connection slots are reserved for non-replication superuser connections
之前有人看过这个或者请帮助我指出正确的方向吗?
答案 0 :(得分:41)
您需要增加max_connections
配置设置或(可能更好)use connection pooling以通过较小的连接池路由大量用户请求。
https://wiki.postgresql.org/wiki/Number_Of_Database_Connections
答案 1 :(得分:7)
Heroku有时会出现数据库负载平衡问题。
André Laszlo
,markshiz
和我都报告了对此问题的评论。
为了节省支持电话,以下是Heroku支持部门针对类似问题的回复:
您好,
业余爱好层数据库的一个限制是未经宣布的维护。许多业余爱好数据库在单个共享服务器上运行,我们偶尔需要重新启动该服务器以进行硬件维护,或者将数据库迁移到另一台服务器以实现负载平衡。发生这种情况时,您会在日志中看到错误或连接时出现问题。如果服务器正在重新启动,则数据库重新联机可能需要15分钟或更长时间。
维护连接池的大多数应用程序(如Rails中的ActiveRecord)只能打开与数据库的新连接。但是,在某些情况下,应用程序将无法重新连接。如果发生这种情况,您可以重新启动应用程序以使其重新联机。
这是我们建议不要为关键生产应用程序运行业余爱好数据库的原因之一。标准版和高级版数据库包括停机事件的通知,并且通常具有更高的性能和稳定性。您可以使用pg:copy迁移到标准或高级计划。
如果继续,您可以尝试使用heroku插件配置新数据库(在不同的服务器上):添加,然后使用pg:copy移动数据。请记住,业余爱好等级规则适用于$ 9基本计划以及免费数据库。
谢谢, 布拉德利
答案 2 :(得分:5)
当我忘记关闭连接时发生此异常
答案 3 :(得分:3)
我实际上尝试使用以下方法在django端实现连接池:
https://github.com/gmcguire/django-db-pool
但我仍然收到此错误,尽管可用的连接数量降低到低于20个开放连接的标准开发数据库配额。
这里有一篇关于如何将postgresql数据库移动到Amazon EC2的免费/廉价层的文章。这样您就可以将max_connections
设置得更高。这还允许您使用PGBouncer在数据库级别池连接。
http://www.askthepony.com/blog/2011/07/getting-django-on-heroku-prancing-8-times-faster/
<强>更新强>
Heroku回应了我的开放票,并表示我的数据库在他们的网络中不正确地负载均衡。他们说,改进他们的系统应该可以防止将来出现类似的问题。尽管如此,支持手动重新定位我的数据库和性能显着提高。
答案 4 :(得分:0)
按照以下命令重新启动postgres数据库:
postgres -D /usr/local/var/postgres
答案 5 :(得分:0)
要在 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