在 pg_stat_activity 中具有 'idle' 状态的持久 'COMMIT' 查询

Long lasting 'COMMIT' queries with 'idle' state in pg_stat_activity

如果我查询:

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

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

其他 SO 线程中描述了一些应用程序实现细节:

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

如果会话是 "idle",则查询列显示连接已执行的 last 语句。它是 not "current" 查询,因此连接是 not 等待提交完成。

如果 status 显示 active.

query 列仅显示 current 语句

一个 "idle" 连接 不是问题 并且本质上是使用连接池的原因,以便可以重新使用它。但是,在 "idle in transaction" 中保持很长时间的会话是 的问题。但是您说您的连接处于 "idle" 状态。

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