首页 > 解决方案 > 杀死超过 4 小时的空闲连接

问题描述

我们想杀死已在 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';

标签: postgresqlconnectionkill

解决方案


这取决于连接规则。如果打开一个连接只是为了执行单个事务(或批处理作业提供的一组事务),您实际上可以杀死所有空闲会话。当允许连接保持打开并等待新的在线查询时,state-change应考虑此时间戳,因为此时间戳指示连接已空闲多长时间。


推荐阅读