summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYorick Peterse <yorickpeterse@gmail.com>2017-12-07 14:51:45 +0100
committerYorick Peterse <yorickpeterse@gmail.com>2017-12-08 12:33:51 +0100
commitc52a36e85959a5461b74bae8f881043a4e4feb45 (patch)
tree2001569f9df252a9277b31d609bb255b010fe874
parent9429e8ac60a10436a0469d7d206d3f74a2c966c7 (diff)
downloadgitlab-ce-fix-event-target-author-preloading.tar.gz
Fix N+1 query when displaying eventsfix-event-target-author-preloading
When displaying events we would load the target of those events, then render the entire data using our Markdown pipeline. This pipeline would eventually request the author of every target, leading to an additional query being executed for every target to get the author. To fix this we now eager load the author of the event's target. In my local environment this reduces the number of queries to display a project's Atom feed from 40 to 24 queries. See https://gitlab.com/gitlab-org/gitlab-ce/issues/36878 for more information.
-rw-r--r--app/models/event.rb2
-rw-r--r--changelogs/unreleased/fix-event-target-author-preloading.yml5
2 files changed, 6 insertions, 1 deletions
diff --git a/app/models/event.rb b/app/models/event.rb
index 0997b056c6a..6053594fab5 100644
--- a/app/models/event.rb
+++ b/app/models/event.rb
@@ -72,7 +72,7 @@ class Event < ActiveRecord::Base
# We're using preload for "push_event_payload" as otherwise the association
# is not always available (depending on the query being built).
includes(:author, :project, project: :namespace)
- .preload(:target, :push_event_payload)
+ .preload(:push_event_payload, target: :author)
end
scope :for_milestone_id, ->(milestone_id) { where(target_type: "Milestone", target_id: milestone_id) }
diff --git a/changelogs/unreleased/fix-event-target-author-preloading.yml b/changelogs/unreleased/fix-event-target-author-preloading.yml
new file mode 100644
index 00000000000..c6154cc0835
--- /dev/null
+++ b/changelogs/unreleased/fix-event-target-author-preloading.yml
@@ -0,0 +1,5 @@
+---
+title: Fix N+1 query when displaying events
+merge_request:
+author:
+type: performance