gpt4 book ai didi

postgresql - 空闲 PostgreSQL 连接是否有超时?

转载 作者:行者123 更新时间:2023-11-29 11:05:01 31 4
gpt4 key购买 nike

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> in transaction 有问题 session ,但总体上连接过多。

终止连接不是解决这个问题的正确方法,但它是一个还行的临时解决方法。

与其重新启动 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 建议的那样设置超时,请参阅 How to close idle connections in PostgreSQL automatically? ,它建议您使用 PgBouncer 来代理 PostgreSQL 并管理空闲连接。如果您有一个无论如何都会泄漏连接的错误应用程序,这是一个非常好的主意;我非常强烈建议配置 PgBouncer。

A TCP keepalive不会在这里完成这项工作,因为该应用程序仍然处于连接状态并且处于事件状态,这是不应该的。

在 PostgreSQL 9.2 及以上版本中,您可以使用新的 state_change时间戳列和 state领域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。

关于postgresql - 空闲 PostgreSQL 连接是否有超时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13236160/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com