【发布时间】:2012-09-05 15:36:35
【问题描述】:
一些客户端连接到我们的 postgresql 数据库但保持连接打开。 是否可以告诉 Postgresql 在一定程度的不活动后关闭这些连接?
TL;DR
如果您使用的是 Postgresql 版本 >=
9.2
然后使用the solution I came up with如果您不想编写任何代码
然后使用arqnid's solution如果您不想编写任何代码
并且您使用的是 Postgresql 版本 >=14
然后使用Laurenz Albe's solution
【问题讨论】:
-
您可以使用 cron 作业查看连接上次处于活动状态的时间(请参阅
pg_stat_activity)并使用pg_terminate_backend杀死旧的。在简单的查询中轻松表达。不过,我不确定pg_terminate_backend在相当古老的 8.3 中是否可用。 -
我在使用 C3P0 池的服务中遇到了类似的问题 - 所有连接都已关闭(最终阻塞)但在我进行负载测试后,负载后空闲连接的数量没有下降测试完毕。在
pg_stat_activity表中,我有很多idle连接正在运行SELECT 1或SHOW TRANSACTION ISOLATION LEVEL。然后当我运行第二次负载测试时,这个数字一直在增长,这是否意味着在第二次测试期间没有重新使用空闲连接?我可以在这里使用相同的解决方案来修复它吗? -
@Zip 你能把你的评论变成一个新问题,并在这里放一个指向这个新问题的链接吗?我会更容易回答你。
-
@Stephan 问题在这里:stackoverflow.com/questions/51682584/…。谢谢!
标签: postgresql timeout connection