Heroku"psql:FATAL:剩余的连接插槽保留用于非复制超级用户连接"

nat*_*ill 97 postgresql heroku

我正在使用Postgresql后端在Heroku上开发一个应用程序.在尝试访问数据库时,我会定期从CLI和加载服务器上的页面时收到此错误消息:

psql: FATAL: remaining connection slots are reserved for non-replication superuser connections
Run Code Online (Sandbox Code Playgroud)

以前看过这个的人还是能指出我正确的方向?

kgr*_*ttn 46

您需要增加max_connections配置设置或(可能更好)使用连接池通过较小的连接池路由大量用户请求.

https://wiki.postgresql.org/wiki/Number_Of_Database_Connections

  • 另一个常见问题是客户端应用程序崩溃并保持连接打开,然后在重新启动时打开新连接.如果这种事情发生了很多,那么你就会耗尽连接.或者应用程序配置不正确并打开太多连接. (14认同)
  • 我不认为我可以更改Heroku上的配置设置.有没有办法关闭所有打开的连接? (5认同)
  • 希望服务器在相当积极的基础上配置为保持活动数据包。如果连接突然中断,这将导致会话在合理的时间内终止。如果没有配置,如果您可以以数据库超级用户身份登录,您可以识别会话的“pid”值并使用“pg_terminate_backend()”函数来终止它们。为避免此问题,请确保正确关闭连接,而不是突然关闭客户端。 (2认同)

Aur*_*raf 7

请参阅Heroku"psql:FATAL:剩余的连接插槽是为非复制超级用户连接保留的":

Heroku有时会出现数据库负载平衡问题.

André Laszlo,markshiz和我所有的报道,在对这个问题的意见处理.

为了节省支持电话,这是我从Heroku支持部门获得的类似问题的回复:

你好,

业余爱好层数据库的一个限制是未经宣布的维护.许多业余爱好数据库在单个共享服务器上运行,我们偶尔需要重新启动该服务器以进行硬件维护,或者将数据库迁移到另一台服务器以实现负载平衡.发生这种情况时,您会在日志中看到错误或连接时出现问题.如果服务器正在重新启动,则数据库重新联机可能需要15分钟或更长时间.

大多数维护连接池的应用程序(如Rails中的ActiveRecord)只能打开与数据库的新连接.但是,在某些情况下,应用程序将无法重新连接.如果发生这种情况,您可以重新启动应用程序以使其重新联机.

这是我们建议不要为关键生产应用程序运行业余爱好数据库的原因之一.标准版和高级版数据库包括停机事件的通知,并且通常具有更高的性能和稳定性.您可以使用pg:copy迁移到标准或高级计划.

如果这种情况继续,您可以尝试使用heroku插件配置新数据库(在不同的服务器上):添加,然后使用pg:copy移动数据.请记住,业余爱好等级规则适用于$ 9基本计划以及免费数据库.

谢谢,布拉德利


San*_*ejű 6

当我忘记关闭连接时发生此异常

  • 是的,您说的对,但是如何关闭连接? (10认同)

mar*_*hiz 5

我实际上尝试使用以下方法在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回应了我的公开票,并说我的数据库在他们的网络中负载均衡不当。他们说,对其系统进行改进应该可以防止将来出现类似的问题。尽管如此,支持手动重定位了我的数据库,性能得到了明显改善。