终止闲置超过 4 小时的连接

Kill idle connections sitting for more than 4 hours

提问人:Matias 提问时间:2/20/2021 更新时间:2/20/2021 访问量:2345

问:

我们想杀死 Postgres 上的空闲连接,这些连接已经在那里放置了 4 个多小时,理想情况下,我们想创建一个 cron 来做到这一点。

我们应该在pg_stat_activity中关注的领域是什么?我们有这些:

backend_start
query_start
state_change

我们假设是backend_start...

然后我们可以做这样的事情:

select pg_terminate_backend(pid) 
from pg_catalog.pg_stat_activity
where backend_start<CURRENT_TIME-4Hours and state='idle';
PostgreSQL 连接 终止

评论


答:

1赞 klin 2/20/2021 #1

这取决于连接规则。如果连接仅打开以执行单个事务(或批处理作业提供的一组事务),则几乎可以终止所有空闲会话。当允许连接保持打开状态并等待新的联机查询时,应考虑此时间戳指示连接处于空闲状态的时间。state-change

1赞 Laurenz Albe 2/20/2021 #2

从 PostgreSQL v14 开始,您可以使用完全执行此操作的参数。idle_session_timeout

评论

1赞 Matias 2/22/2021
我忘了说我们正在使用 Postgres V9.4
0赞 Laurenz Albe 2/22/2021
然后,您将不得不求助于klin的解决方案。