【发布时间】:2016-07-13 20:35:15
【问题描述】:
在过去的几个月里,我的网站(使用 Heroku 在 Rails 4 上运行)一直没有问题。流量稳定,响应时间低于 500 毫秒。
今天,随机响应时间飙升至 20,000 毫秒以上。
查看日志时,我注意到 ActiveRecord 运行 SELECT DISTINCT COUNT 的时间异常长。事实上,这似乎是导致加载缓慢的原因。
(5029.1ms) SELECT DISTINCT COUNT(DISTINCT "impressions"."session_hash") FROM "impressions" WHERE "impressions"."impressionable_id" = $1 AND "impressions"."impressionable_type" = $2 [["impressionable_id", 826], ["impressionable_type", "Article"]]
我想说这是由印象派 gem 和我用来显示文章计数的计数器缓存引起的,但我不确定。
我现在也是第一次在我的日志中看到这个错误:
PG::DuplicatePstatement: ERROR: prepared statement "a9" already exists
任何帮助了解正在发生的事情都会很棒。似乎无法找到有关该问题的文档。很奇怪,我的应用程序已经稳定运行了几个月,而就在今天它决定走下坡路。
我还在 Heroku 中使用 Rack Timeout gem。我听说这个 gem 可以直接或间接地导致上述错误,但我只是想知道为什么会发生这种情况。如果我可以提供任何其他信息或指标,请告诉我。
一天后更新:
响应时间自行恢复正常(
仅供参考,上面的SELECT DISTINCT COUNT查询是从我的文章显示页面中的这段代码执行的,它只是计算会话的唯一展示次数:
<%= @article.impressionist_count(filter: :session_hash) %>
【问题讨论】:
-
您使用 Heroku 的付费版还是免费版?
-
付费...在标准 2X Dyno 和 Hobby Basic DB(10m 行)@CheeseFry 上运行
-
您能发布生成该查询的 Ruby 代码吗?
标签: sql ruby-on-rails ruby ruby-on-rails-4 heroku