加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

有空闲的PostgreSQL连接超时吗?

发布时间:2020-12-13 16:48:39 所属栏目:百科 来源:网络整理
导读:1 S postgres 5038 876 0 80 0 - 11962 sk_wai 09:57 ? 00:00:00 postgres: postgres my_app ::1(45035) idle 1 S postgres 9796 876 0 80 0 - 11964 sk_wai 11:01 ? 00:00:00 postgres: postgres my_app ::1(43084) idle 我看到很多他们。我们正在努力修复
1 S postgres  5038   876  0  80   0 - 11962 sk_wai 09:57 ?        00:00:00 postgres: postgres my_app ::1(45035) idle                                                                                 
1 S postgres  9796   876  0  80   0 - 11964 sk_wai 11:01 ?        00:00:00 postgres: postgres my_app ::1(43084) idle

我看到很多他们。我们正在努力修复我们的连接泄漏。但同时,我们要为这些空闲连接设置超时,也许最多为5分钟。

听起来你的应用程序有一个连接泄漏,因为它无法关闭池连接。您没有遇到问题,只需使用< idle>在事务会话中,但总体连接太多。

杀死连接不是正确的答案,但它是一个OK-ish临时解决方法。

而不是重新启动PostgreSQL以从一个PostgreSQL数据库引导所有其他连接,请参阅:How do I detach all other users from a postgres database?和How to drop a PostgreSQL database if there are active connections to it?。后者显示更好的查询。

对于设置超时,如@Doon建议看到Is it possible to configure PostgreSQL to automatically close idle connections?,建议您使用PgBouncer代理PostgreSQL和管理空闲连接。这是一个很好的主意,如果你有一个buggy应用程序泄漏连接;我强烈建议配置PgBouncer。

一个TCP keepalive不会在这里做的工作,因为应用程序仍然连接和活着,它只是不应该。

在PostgreSQL 9.2及以上版本中,您可以使用新的state_change时间戳列和pg_stat_activity的状态字段来实现空闲连接回收。有一个cron工作运行这样:

SELECT pg_terminate_backend(pid)
    FROM pg_stat_activity
    WHERE datname = 'regress'
      AND pid <> pg_backend_pid()
      AND state = 'idle'
      AND state_change < current_timestamp - INTERVAL '5' MINUTE;

在旧版本中,您需要实现复杂的方案来跟踪连接何时空闲。不要打扰;只是使用pgbouncer。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读