长时间的“COMMIT”查询,其中“空闲”状态为pg_stat_activity

如果我查询:

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

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

一些应用程序实现细节在其他 SO 线程中进行了描述:线程池中的 Guice DAO 提供程序 - 查询在传输中变得“空闲”

为什么会发生这种情况?如何解决这个问题?


答案 1

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

该列仅显示 当前语句,如果显示 .querystatusactive

“空闲”连接不是问题,本质上是使用连接池的原因,以便可以重复使用它。但是,在“事务中空闲”中保持很长时间的会话一个问题。但是您声明您的连接处于“空闲”状态。

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


答案 2

推荐