【发布时间】:2014-04-29 05:27:08
【问题描述】:
我运行以下代码来捕获任何可能挂起的 SQL 语句。在尝试对此进行测试时,我编写了一个经过优化的 sql 语句,运行时间超过一分钟。我在 activerecord 执行 sql 语句周围放置了一个 20 秒的超时包装器,但它似乎并没有因为需要很长时间而中断 sql 调用。这是针对 Oracle 数据库运行的。
start_time = Time.now
Timeout.timeout(20) do #20 timeout for long running sql
@connection.connection.execute(sql_string)
end
total_sql_time = Time.now - start_time
puts "Sql statement took #{total_sql_time} seconds
输出
Sql statement took 64 seconds
【问题讨论】:
-
postgresql 不是这种情况。这样做
Timeout.timeout(2) { Product.connection.execute('select pg_sleep(10) ') }将调用异常。 -
@ParitoshPiplewar Mine 调用异常但是在抛出异常之前它仍会等待获取响应
-
问这个问题的最佳地点是 oracle-enhanced_adapter 的邮件列表。当我使用 Oracle 时,它回答了各种类似的问题。
标签: sql ruby-on-rails ruby activerecord timeout