17

我在运行 Heroku Postgres Basic 时收到了上述错误消息(根据这个问题),并且一直在尝试诊断问题。

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

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

我将如何调试这个?

解析度

原来这是一个 Heroku 问题。来自 Heroku 的支持:

我们在运行 Basic 数据库的服务器上检测到问题。虽然我们确定并解决了这个问题,但我们建议您配置一个新的基本数据库并使用 PGBackups 进行迁移,详细信息如下: https ://devcenter.heroku.com/articles/upgrade-heroku-postgres-with-pgbackups 。那应该将您的数据库放在新服务器上。对于这次中断,我深表歉意——我们正在努力解决这个问题,并防止它在未来发生。

4

3 回答 3

17

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

heroku pg:killall

这将终止与数据库的所有连接。如果您的情况可能切断查询是危险的,请小心。我只有一个 Rails 应用程序,如果它出现故障,丢失几个查询并不是什么大问题,因为浏览器请求无论如何都会超时。

于 2013-08-25T21:45:44.570 回答
9

您可以通过检查视图pg_stat_activity找到为什么有这么多连接:

SELECT * FROM pg_stat_activity

最有可能的是,您有一些杂散循环打开新连接而不关闭它。

于 2012-11-30T07:47:54.653 回答
8

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

你好,

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

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

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

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

谢谢,布拉德利

于 2015-11-19T18:06:25.323 回答