我们最近看到一些查询“在事务中空闲”很长一段时间
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 错误。
在postgresql“事务中空闲”中,所有锁都被授予@LaurenzAlbe指出空闲会话超时配置选项是一个创可贴,但我宁愿理解这个问题而不是隐藏它。
谢谢!
PS:我们的应用程序是 ruby on Rails,我们混合使用活动记录和自定义 SQL
编辑:原始标题是“事务中空闲”,查询实际上大部分时间都是空闲的,而不是在事务中,对此感到抱歉
编辑 #2:发现交易过程中有 13 小时空闲
我被困在 Rails 中使用 TimescaleDB - 开发中一切正常,但在我的测试套件中我无法插入任何数据。
这导致了我看到的原始错误消息。它确实为 TimescaleDB 创建了部分架构,但不是全部。我有一个超表,但它无法正常工作
这让我可以插入到我的表中,但它根本不是超表 - ruby 语法丢失了与 TimescaleDB 和超表相关的所有内容。
我尝试避免 schema.struct 转储并加载以下内容:
$ rails db:drop
Dropped database 'my_app_development'
Dropped database 'my_app_test'
$ RAILS_ENV=test rails db:create
Created database 'my_app_test'
$ RAILS_ENV=test rails db:migrate
== 20200517164444 EnableTimescaledbExtension: migrating =======================
-- enable_extension("timescaledb")
WARNING:
WELCOME TO
_____ _ _ ____________
|_ _(_) | | | _ \ ___ \
| | _ _ __ ___ ___ ___ …Run Code Online (Sandbox Code Playgroud)