【发布时间】:2021-09-25 10:42:57
【问题描述】:
我们的应用具有以下规格:Ruby 2.6.5、Rails 4.2.11、MySQL 5.7.33(max_execution_time = 1200000,20 分钟)
对于庞大的数据,例如公司数据,有时我们查询时会花费很长时间。所以我决定用Timeout::timeout强制停止查询,但是好像不行。
这是示例代码
begin
max_time = 600 # 10minutes
Timeout::timeout(max_time) do
company = Company.where(location: 'West').last
end
rescue => e
company = nil
end
预期如果查询仍在处理,它应该在 10 分钟内停止。但它会在 20 分钟后停止,这是 MySQL 的最大超时。
我已经检查过了,它可以在 5 秒内停止
Timeout::timeout(5) { sleep(10) }
但是有了这个,它仍然会在 10 秒内停止
Timeout::timeout(5) { Company.select('SLEEP(10)').limit(1) }
是否可以使用 rails 停止查询?
【问题讨论】:
标签: mysql ruby-on-rails ruby ruby-on-rails-4