Skip to content

Optimize number of queries for approvals

Bob Van Landuyt requested to merge bvl-optimize-mr-approvals into master

This reduces the number of queries inside the Projects::MergeRequestsController approval methods by just eager loading some relations

Counting the queries in this spec: ./spec/features/projects/merge_requests/user_approves_merge_request_spec.rb

I noticed this result:

Before:

Projects::MergeRequestsController#approvals (application/json): 31
Projects::MergeRequestsController#approve (application/json): 99
Projects::MergeRequestsController#approvals (application/json): 31
Projects::MergeRequestsController#approve (application/json): 93
Projects::MergeRequestsController#approvals (application/json): 30
Projects::MergeRequestsController#approve (application/json): 91
Projects::MergeRequestsController#approvals (application/json): 31
Projects::MergeRequestsController#approve (application/json): 97
Projects::MergeRequestsController#approvals (application/json): 34

Step 1:

Projects::MergeRequestsController#approvals (application/json): 29
Projects::MergeRequestsController#approve (application/json): 95
Projects::MergeRequestsController#approvals (application/json): 29
Projects::MergeRequestsController#approve (application/json): 89
Projects::MergeRequestsController#approvals (application/json): 28
Projects::MergeRequestsController#approve (application/json): 87
Projects::MergeRequestsController#approvals (application/json): 28
Projects::MergeRequestsController#approve (application/json): 92
Projects::MergeRequestsController#approvals (application/json): 33

Step 2:

Projects::MergeRequestsController#approvals (application/json): 24
Projects::MergeRequestsController#approve (application/json): 89
Projects::MergeRequestsController#approvals (application/json): 24                                                      |  
Projects::MergeRequestsController#approve (application/json): 83
Projects::MergeRequestsController#approvals (application/json): 24
Projects::MergeRequestsController#approve (application/json): 83
Projects::MergeRequestsController#approvals (application/json): 24
Projects::MergeRequestsController#approve (application/json): 89
Projects::MergeRequestsController#approvals (application/json): 24

After:

Projects::MergeRequestsController#approvals (application/json): 22
Projects::MergeRequestsController#approve (application/json): 82
Projects::MergeRequestsController#approve (application/json): 76
Projects::MergeRequestsController#approvals (application/json): 22
Projects::MergeRequestsController#approve (application/json): 75
Projects::MergeRequestsController#approvals (application/json): 22
Projects::MergeRequestsController#approve (application/json): 81
Projects::MergeRequestsController#approvals (application/json): 22                
Projects::MergeRequestsController#approvals (application/json): 21

So a tiny improvement, there's probably more to be won.

What are the relevant issue numbers?

Fixes: https://gitlab.com/gitlab-org/gitlab-ee/issues/4903 (Partly at least)

Edited by Bob Van Landuyt

Merge request reports