postgres“事务空闲”13小时

Axe*_*man 5 postgresql

我们最近看到一些查询“在事务中空闲”很长一段时间

 pid  | usename |        state        | duration | application_name | wait_event | wait_event_type
------+---------+---------------------+----------+------------------+------------+----------------
31620 | results | idle in transaction | 12:52:23 | bin/rails        |            |                
Run Code Online (Sandbox Code Playgroud)

这相当于交易闲置了近 13 个小时。

知道是什么导致他们陷入闲置状态,或者如何深入挖掘?我们确实注意到后台作业出现一些 OOM 错误。

还有很多“空闲”查询,但感谢您的评论,这些似乎很好: postgres 中的空闲事务

postgresql“事务中空闲”中,所有锁都被授予@LaurenzAlbe指出空闲会话超时配置选项是一个创可贴,但我宁愿理解这个问题而不是隐藏它。

谢谢!

PS:我们的应用程序是 ruby​​ on Rails,我们混合使用活动记录和自定义 SQL

编辑:原始标题是“事务中空闲”,查询实际上大部分时间都是空闲的,而不是在事务中,对此感到抱歉

编辑 #2:发现交易过程中有 13 小时空闲

Lau*_*lbe 4

这些会话实际上都是空闲的,所以没有问题。

idle与 显着不同idle in transaction:后者是持有锁和块的开放事务VACUUM,第一个是无害的。

OOM 错误必定有不同的原因。

您应该配置机器,以便

shared_buffers + max_connections * work_mem <= available RAM
Run Code Online (Sandbox Code Playgroud)