杀死超过 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';

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

从 PostgreSQL v14 开始,您可以使用 idle_session_timeout 参数来实现这一点。