我们最近在相当长一段时间内看到了一些查询“处于空闲状态”
pid | usename | state | duration | application_name | wait_event | wait_event_type
------+---------+---------------------+----------+------------------+------------+----------------
31620 | results | idle in transaction | 12:52:23 | bin/rails | |
这大约有13个小时的空闲时间。
有什么想法会导致他们陷入空闲状态,或者如何进行更深入的挖掘?我们确实注意到一些后台作业的OOM错误。
也有很多“空闲”查询,但是感谢您的评论,这些查询似乎还不错:
在postgresql "idle in transaction" with all locks granted中,@ LaurenzAlbe指出了空闲会话超时配置选项作为创可贴,但我宁愿了解此问题,也不愿隐藏它。
谢谢!
PS:我们的应用程序是红宝石,并且使用了活动记录和自定义SQL的组合
编辑:原始标题为“交易中空闲”,查询实际上大部分时间只是闲置而没有交易,对此感到抱歉
编辑2:发现交易过程中闲置了13小时
答案 0 :(得分:1)
这些会话实际上都是空闲的,因此没有问题。
idle
与idle in transaction
显着不同:后者是一个开放的事务,其中包含锁和块VACUUM
,第一个是无害的。
OOM错误必须具有不同的原因。
您应该配置机器,以便
shared_buffers + max_connections * work_mem <= available RAM