2

我正在使用 charlotte-ruby/impressionist 来跟踪我的 rails 应用程序中的印象。

我有一个非常简单的实现,类似于快速入门指南中显示的内容。有效地: - 控制器:印象派动作:[:show, :index] - 视图:@post.impressionist_count - 模型:is_impressionable

我今天遇到了一些数据库排队问题,在 Heroku Postgres 中检查我的昂贵查询时发现了以下问题: 在此处输入图像描述

我立即从我的控制器/视图中删除了印象派(在 14:30),您可以看到它如何影响性能: 在此处输入图像描述

有没有人遇到过印象派宝石的类似问题?从数据库的角度来看,为什么它如此昂贵有什么想法吗?

编辑:

以下是添加的索引:

  add_index "impressions", ["controller_name", "action_name", "ip_address"], name: "controlleraction_ip_index", using: :btree
  add_index "impressions", ["controller_name", "action_name", "request_hash"], name: "controlleraction_request_index", using: :btree
  add_index "impressions", ["controller_name", "action_name", "session_hash"], name: "controlleraction_session_index", using: :btree
  add_index "impressions", ["impressionable_type", "impressionable_id", "ip_address"], name: "poly_ip_index", using: :btree
  add_index "impressions", ["impressionable_type", "impressionable_id", "request_hash"], name: "poly_request_index", using: :btree
  add_index "impressions", ["impressionable_type", "impressionable_id", "session_hash"], name: "poly_session_index", using: :btree
  add_index "impressions", ["impressionable_type", "message", "impressionable_id"], name: "impressionable_type_message_index", using: :btree
  add_index "impressions", ["user_id"], name: "index_impressions_on_user_id", using: :btree
4

2 回答 2

1

@Ken Hampson - 感谢您的推荐。寻找长期运行的 SELECT 查询确定了另一个需要的索引。一旦添加,POOF,一切都变得更好了。很奇怪,这个问题在网站运行了几个月后才出现。印象一定达到了压垮骆驼的规模。感谢帮助!

对于因数据库查询(在 Heroku 上)而遇到性能下降的类似问题的任何人,请访问https://postgres.heroku.com/databases/your-database-name并查看“昂贵的查询”表找出可能错过索引的位置的方法。

于 2014-09-04T02:32:55.733 回答
0

大型项目(数千/百万用户)的最佳解决方案是出气筒 gem,请通过文档进行集成:punching_bag

当每个请求都创建一个新记录时,就会出现主要问题,这会给数据库带来巨大的负载。宝石印象派在这里失败了。沙袋也能创造记录,但它有一个救援任务:

每月/每周为该 rake 任务安排一次 cron 作业,以减少(对记录进行分组)记录的数量,而不会影响可以通过简单的 -@post.hits 找到的页面查看次数。这是 rake 任务:rake punching_bag:combine[by_hour_after,by_day_after,by_month_after,by_year_after]

于 2020-07-30T18:30:00.017 回答