Fix N+1 query when displaying events
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.
This commit is contained in:
parent
9429e8ac60
commit
c52a36e859
2 changed files with 6 additions and 1 deletions
|
@ -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) }
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
title: Fix N+1 query when displaying events
|
||||
merge_request:
|
||||
author:
|
||||
type: performance
|
Loading…
Reference in a new issue