我们最近看到一些查询“在交易中闲置”了很长一段时间
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 指出空闲 session 超时配置选项是一种创可贴,但我宁愿理解这个问题也不愿隐藏它。
谢谢!
PS:我们的应用程序是 ruby on rails,我们混合使用事件记录和自定义 SQL
编辑:原来的标题是“idle in transaction”,查询实际上大部分时间只是空闲而不是在事务中,对此感到抱歉
编辑 #2:发现交易过程中有 13 小时空闲
最佳答案
这些 session 其实都是空闲的,所以没有问题。
idle
与idle in transaction
有显着区别:后者是一个开放的事务,持有锁并阻塞VACUUM
,第一个是无害的.
OOM 错误一定有不同的原因。
你应该这样配置机器
shared_buffers + max_connections * work_mem <= available RAM
关于postgresql - postgres "idle in transaction"13 小时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58103168/