提问人:Matias 提问时间:2/20/2021 更新时间:2/20/2021 访问量:2345
终止闲置超过 4 小时的连接
Kill idle connections sitting for more than 4 hours
问:
我们想杀死 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';
答:
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的解决方案。
评论