我有一个在Heroku上运行的应用程序。此应用程序安装了Postgres 9.2.4 (Dev)插件。为了访问我的在线数据库,我使用Navicat Postgres。有时Navicat不会干净地关闭它与Postgres数据库建立的连接。结果是,一段时间后,就会有20+打开到Postgres数据库的连接。我的Postgres安装只允许20个并发连接。因此,使用20+打开的连接,我的Postgress数据库现在是无法访问的(连接太多)。
我知道这是Navicat的一个问题,我正在努力解决这个问题。但是如果发生这种情况(连接太多),我如何解决这个问题(例如关闭所有连接)。
我已经尝试了以下所有的方法,但都没有结果。
Postgres路由器关闭Navicat并重启我的电脑(OS X 10.9)
heroku restart
)
的IP的所有连接
我认为很明显,Postgres方面有一些“死亡”的联系。但是我如何关闭它们呢?
发布于 2013-11-06 23:32:41
也许可以看看heroku pg:kill
能为您做些什么?https://devcenter.heroku.com/articles/heroku-postgresql#pg-ps-pg-kill-pg-killall
发布于 2014-02-05 15:18:41
heroku pg:killall
将杀死所有打开的连接,但这可能是一个迟钝的工具来满足您的需求。有趣的是,你可以使用heroku的来杀死特定的连接。
要获取详细的连接列表,可以通过dataclips进行查询:
SELECT * FROM pg_stat_activity;
在某些情况下,您可能想要终止与某个IP地址关联的所有连接(您的笔记本电脑或在我的情况下,现在已被销毁的服务器)。
您可以使用以下命令查看每个客户端IP有多少个连接:
SELECT client_addr, count(*)
FROM pg_stat_activity
WHERE client_addr is not null
AND client_addr <> (select client_addr from pg_stat_activity where pid=pg_backend_Tid())
GROUP BY client_addr;
它将列出每个IP的连接数量,不包括数据链路本身使用的IP。
要真正杀死这些连接,需要将它们的"pid“传递给pg_terminate_backend()。在这个简单的例子中:
SELECT pg_terminate_backend(1234)
其中,1234是您在pg_stat_activity中找到的违规PID。
在我的例子中,我想要杀死与一个(现在已经死掉的)服务器相关的所有连接,所以我使用:
SELECT pg_terminate_backend(pid), host(client_addr)
FROM pg_stat_activity
WHERE host(client_addr) = 'IP HERE'
发布于 2013-11-06 22:46:00
来自Heroku documentation (重点是我的):
致命:角色的连接太多
致命:角色“角色名称”的连接太多这发生在入门层(开发和基本)计划上,每个用户的最大连接限制为20。要解决此错误,请通过停止后台工作进程、减少dynos数量或重新启动应用程序来关闭与数据库的某些连接,以防应用程序随着时间的推移而造成连接泄漏。可以在此处找到有关在Rails应用程序中处理连接的讨论。
由于Heroku does not provide superuser access,您的选择仅限于上述几点。
https://stackoverflow.com/questions/19814740
复制相似问题