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

Der*_*ill 13 activerecord ruby-on-rails heroku

我收到运行Heroku Postgres Basic的上述错误消息(根据此问题),并一直在尝试诊断问题.

其中一个建议是使用连接池,但似乎Rails内置了它.另一个建议是应用程序配置不正确并打开太多连接.

我的应用程序通过Active Record管理它的所有连接,我从Navicat直接连接到数据库(或者至少我以为我有).

我该怎么调试呢?

解析度

事实证明这是一个Heroku问题.来自Heroku支持:

我们在运行Basic数据库的服务器上检测到了一个问题.虽然我们查明并解决了这个问题,但我们建议您配置一个新的Basic数据库并使用PGBackups进行迁移,详情请参见 https://devcenter.heroku.com/articles/upgrade-heroku-postgres-with-pgbackups .这应该将您的数据库放在新服务器上.我为这次中断道歉 - 我们正在努力解决这个问题并防止它在未来发生.

jpa*_*dvo 14

这在我的应用程序上发生了几次 - 不知何故有连接泄漏,然后突然数据库获得的连接数量应该是应有的10倍.如果您遇到这样的错误,而不是流量,请尝试运行:

heroku pg:killall
Run Code Online (Sandbox Code Playgroud)

这将终止与数据库的所有连接.如果您的情况很危险,可能会切断查询,请小心.我只有一个rails应用程序,如果它发生故障,丢失几个查询并不是什么大问题,因为浏览器请求自从超时以后就会有一些looooooong.


mvp*_*mvp 9

您可以通过检查视图pg_stat_activity来找到有这么多连接的原因:

SELECT * FROM pg_stat_activity
Run Code Online (Sandbox Code Playgroud)

最有可能的是,你有一些杂散循环,可以在不关闭它的情况下打开新连接.


Aur*_*raf 6

为了节省您的支持电话,以下是我从 Heroku 支持部门收到的针对类似问题的回复:

你好,

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

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

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

如果这种情况继续存在,您可以尝试使用 heroku addons:add 配置一个新数据库(在不同的服务器上),然后使用 pg:copy 移动数据。请记住,爱好等级规则适用于 9 美元的基本计划以及免费数据库。

谢谢,布拉德利