【发布时间】:2023-03-19 03:54:01
【问题描述】:
我正在使用 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
【问题讨论】:
-
我在安装
impressionistgem 时注意到的是它在数据库中创建的大量索引。我把它们都去掉了,因为我认为你很少使用的表中不需要索引。也许这就是你造成这种情况的原因。 -
很难从发布的数据中得出确切的结论(除了您得出的高级别的结论,即 印象派 gem 是可能的原因)...是否有任何索引在适合
where子句条件的impressions表的数据库中?是否有一堆selects 为给定的页面加载而聚集在一起? -
为问题添加了索引。这个不是太熟悉。有什么不正常的地方吗?
-
从抽象出到 Ruby DSL 中的索引,很难说是哪一种……索引对性能有帮助吗?最能说明问题的是获取长时间运行的
SELECT查询的查询计划,并查看是否缺少索引。 -
@Iceman 见stackoverflow.com/questions/27862701/…。你有什么建议吗?
标签: ruby-on-rails database postgresql heroku impressions