我使用charlotte-ruby / impressionist跟踪我的rails应用中的展示次数。
我有一个非常简单的实现,类似于快速入门指南中显示的内容。有效: - 控制者:印象派动作:[:show,:index] - 查看:@ post.impressionist_count - 型号:is_impressionable
我今天遇到了一些数据库排队问题,在Heroku Postgres中查看我的昂贵查询时发现了以下问题:
我立即从我的控制器/视图中删除了印象派(14:30),你可以看到它对性能的影响:
有没有人遇到与印象派宝石类似的问题?从DB的角度来看,为什么它如此昂贵的任何想法?
编辑:
以下是添加的索引:
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
答案 0 :(得分:1)
@Ken Hampson - 感谢您的推荐。寻找长时间运行的SELECT查询,确定了另一个需要的索引。一旦添加,POOF,一切都更好。非常奇怪的是,这个问题只是在网站上线几个月之后才出现。印象必须达到打破骆驼背部的大小。感谢帮助!
对于因DB查询而导致性能下降的类似问题的任何人(在Heroku上),转到https://postgres.heroku.com/databases/your-database-name并查看“Expensive Queries”表是一个很好的方法来找出你可能错过的地方索引。
答案 1 :(得分:0)
大型项目(成千上万的用户)的最佳解决方案是出气筒宝石,通过文档进行集成:punching_bag
当每个请求都创建一个新记录,这给数据库带来了巨大的负担时,就会出现主要问题。宝石印象主义者在这里失败。出气筒也可以创建记录,但是它有一个可以解救的耙任务:
计划每月一次或每周一次的计划任务,以减少(对记录进行分组)记录的数量,而不会影响通过-@post.hits可以找到的页面浏览量。这是瑞克任务:瑞克punching_bag:combine [by_hour_after,by_day_after,by_month_after,by_year_after]