在pg_stat_activity中具有“空闲”状态的持久“COMMIT”查询

如果我查询:

select * from pg_stat_activity where application_name ~ 'example-application'; 

我得到很多行,状态是idle ,查询是COMMIT 。 它们持久耐用,不会消失。 一段时间后,我的应用程序达到hibernate.c3p0.max_size (池中的最大JDBC连接数)限制并停止使用数据库。

一些应用程序实现细节在其他SO线程中描述: 线程池中的Guice DAO Provider – 查询变为“在转换中空闲”

为什么会这样? 如何解决这个问题呢?

如果会话为“空闲”,则查询列将显示连接已执行的最后一个语句。 它不是 “当前”查询,因此连接等待提交完成。

如果status显示为activequery列仅显示当前语句。

“空闲”连接不是问题 ,基本上是使用连接池的原因,因此可以重复使用它。 但是,在“交易闲置” 保持很长时间的会话个问题。 但是你说你的连接处于“空闲”状态。

如果您的连接池达到限制,这很可能意味着您的应用程序没有正确地将连接返回到池。 这是您需要在应用程序中修复的内容。