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

时间:2017-05-24 10:43:05

标签: java postgresql hibernate guice connection-pooling

如果我查询:

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

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

其他SO线程中描述了一些应用程序实现细节: Guice DAO Provider in thread pool - queries become 'idle in transation'

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

1 个答案:

答案 0 :(得分:14)

如果会话是"空闲"查询列显示连接已执行的最后语句。 "当前"查询,因此连接等待提交完成。

如果query显示status,则active列仅显示当前语句。

"空闲"连接不是问题,基本上是使用连接池的原因,因此可以重复使用它。但是,在交易中空闲时间非常长的会话" 是一个问题。但是你说你的联系是在闲置"州。

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