繁体   English   中英

如何杀死 Postgresql 中的空闲连接。?

[英]How to kill the idle connection in Postgresql.?

我正在使用 java servlet 和 pgadmin 9.1。问题是 servlet 中的连接没有正确关闭,因此如果达到最大连接会导致黑屏。我不希望每个用户都在 pgadmin 中扩展最大连接...我在 servlet 的起点和终点使用了以下查询,但它显示的错误如..connection因管理员命令而终止..

ResultSet rs_1q=st_Query3.executeQuery("SELECT pg_terminate_backend(pg_stat_activity.procpid)FROM pg_stat_activity WHERE pg_stat_activity.current_query = '<IDLE>' AND procpid <> pg_backend_pid();");

通常,正如@Rahul 指出的那样,不建议终止连接。 但如果这是你最后的手段,这是终止空闲连接的方法:

SELECT pg_terminate_backend(pid) FROM pg_stat_activity
WHERE datname = 'databasename'
AND pid <> pg_backend_pid()
AND state in ('idle');

我不认为杀死连接是一个理想的解决方案,因为可能存在某些可能真正等待事务完成的连接。 相反,我建议您为您的交易设置超时。

但是,如果您不顾一切地杀死空闲连接,那么您可以尝试这样:

使用 shell 脚本并执行"ps auxwww|grep 'idle in transaction'" ,这将返回所有“idle in transaction”的列表。 过程。 然后您可以使用“awk”并查找每一行输出来获取进程ID,最后您可以对每个进程使用"kill <pid>"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM