【问题标题】:Long lasting 'COMMIT' queries with 'idle' state in pg_stat_activitypg_stat_activity 中具有“空闲”状态的持久“提交”查询
【发布时间】:2017-05-24 10:43:04
【问题描述】:

如果我查询:

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'

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

【问题讨论】:

  • 我相信池中的连接由于某种原因没有被重用

标签: java postgresql hibernate guice connection-pooling


【解决方案1】:

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

query 列仅在status 显示active 时显示当前 语句。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-22
    • 1970-01-01
    • 2019-11-22
    • 2021-01-30
    • 1970-01-01
    • 2017-10-31
    • 2021-02-15
    • 1970-01-01
    相关资源
    最近更新 更多