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

解决方法

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

,

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...