Skip to content

perf: preload members for meeting attendees list - #2961

Merged
mroderick merged 2 commits into
masterfrom
perf/issue-2953-meeting-nplus-one
Sep 28, 2026
Merged

mroderick merged 2 commits into
masterfrom
perf/issue-2953-meeting-nplus-one

Conversation

@mroderick

@mroderick mroderick commented Sep 28, 2026 •

Copy link
Copy Markdown
Collaborator

Closes #2953

Problem

MeetingsController#show builds @attendees without preloading members:

@attendees = @meeting.invitations.where(attending: true)

The show.html.haml view calls attendee.member.avatar(56) and
attendee.member.full_name per row, so each attendee triggers a separate
members query. Production logs (7 days to 2026-09-27) show 63 queries at
p50 and 93 at p95 for MeetingsController#show.

Change

Add .includes(:member) to the attendees relation. No new specs: Bullet is
the repo's N+1 guard and can be run on demand, so a dedicated query-count
spec would duplicate that coverage on every test run.

Checked but not changed

Verification

  • Bullet (N+1 guard, installed in this repo) reports clean on
    GET /meetings/:slug with the preload in place, and flags the member
    query per attendee without it.
  • spec/models/meeting_spec.rb, spec/models/meeting_invitation_spec.rb,
    spec/presenters/meeting_presenter_spec.rb: 52 examples, 0 failures.
  • rubocop clean.

MeetingsController#show built the attendees relation without preloading
member, so the attendee list on the show page issued one members query
per attending invitation (63 queries at p50, 93 at p95 in production).
Add includes(:member) and guard the fix with a query-count regression
spec following the pattern in event_card_render_query_cost_spec.

Closes #2953
Bullet is the repo's N+1 guard (on-demand via bullet's logger/console in
development), so a dedicated query-count spec duplicates that coverage
and costs test runtime on every run.
@mroderick
mroderick marked this pull request as ready for review September 28, 2026 07:36
@mroderick
mroderick merged commit f79ac60 into master Sep 28, 2026
11 checks passed
@mroderick
mroderick deleted the perf/issue-2953-meeting-nplus-one branch September 28, 2026 07:36
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Meeting show pages run 63-93 queries per request (attendee N+1)

1 participant