Improve performance of Search API (Advanced): issues scope

Summary

In &3166 (closed) a performance issue was raised around the response time of the Advanced Search API. This issue deals specifically with the issues scope, at the Global, Group, and Project levels. Below are results of a performance test that was run on the 10k reference architecture:

API - Global Search
    ✓ { endpoint:issues }...........: avg=12825.85ms min=558.53ms med=15235.12ms max=18240.46ms p(90)=17229.82ms p(95)=17435.78ms
API - Group Search
    ✓ { endpoint:issues }...........: avg=16061.85ms min=4167.90ms med=15474.78ms max=29154.93ms p(90)=23185.39ms p(95)=24793.70ms
API - Project Search
    ✓ { endpoint:issues }...........: avg=10908.93ms min=6507.85ms med=11101.48ms max=15386.18ms p(90)=12482.17ms p(95)=13095.13ms

Improvements

For a single page of 20 results, there are ~250 queries being performed. Among these, it can be observed that there are several associations being loaded in an N + 1 style, including:

  • labels
  • users (issue assignees)
  • routes
  • namespaces
  • timelogs
  • milestones
  • projects

By preloading associations more aggressively, we can batch these queries together and reduce the load on Postgres.


There are also a few COUNT(*) queries performed for each record returned in the results, related to:

  • notes (number of comments made by users)
  • merge_requests_closing_issues
  • award_emoji x2 (number of upvotes & downvotes)

These might require a bit more work to optimize. We can perform one query per record type, and use GROUP BY to get the count associated with each individual issue. Again, batching these queries together should help reduce load on Postgres.

Queries
Started GET "/api/v4/projects/1/search?scope=issues&search=*"
  PersonalAccessToken Load (0.3ms)  SELECT "personal_access_tokens".* FROM "personal_access_tokens" WHERE "personal_access_tokens"."token_digest" = '' LIMIT 1
  ↳ app/models/concerns/token_authenticatable_strategies/digest.rb:8:in `find_token_authenticatable'
  User Load (0.5ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 1 LIMIT 1
  ↳ lib/gitlab/auth/auth_finders.rb:103:in `find_user_from_access_token'
  License Load (0.2ms)  SELECT "licenses".* FROM "licenses" ORDER BY "licenses"."id" DESC LIMIT 1
  ↳ ee/app/models/license.rb:268:in `load_license'
  Project Load (0.6ms)  SELECT "projects".* FROM "projects" WHERE "projects"."pending_delete" = FALSE AND "projects"."id" = 1 LIMIT 1
  ↳ lib/api/helpers.rb:108:in `find_project'
  Group Load (0.4ms)  SELECT "namespaces".* FROM "namespaces" WHERE "namespaces"."type" = 'Group' AND "namespaces"."id" = 22 AND "namespaces"."type" = 'Group' LIMIT 1
  ↳ ee/app/policies/ee/project_policy.rb:308:in `block (2 levels) in <module:ProjectPolicy>'
  IpRestriction Load (0.2ms)  SELECT "ip_restrictions".* FROM "ip_restrictions" WHERE "ip_restrictions"."group_id" = 22
  ↳ ee/lib/gitlab/ip_restriction/enforcer.rb:31:in `allows_address?'
  Project Load (0.6ms)  SELECT "projects".* FROM "projects" WHERE "projects"."id" = 1 LIMIT 1
  ↳ app/services/search_service.rb:20:in `project'
  Route Load (0.3ms)  SELECT "routes".* FROM "routes" WHERE "routes"."source_id" = 1 AND "routes"."source_type" = 'Project' LIMIT 1
  ↳ app/models/concerns/routable.rb:77:in `full_path'
   (0.7ms)  SELECT "projects"."id" FROM "projects" LEFT JOIN project_features ON projects.id = project_features.project_id WHERE "projects"."id" = 1 AND ("project_features"."issues_access_level" > 0 OR "project_features"."issues_access_level" IS NULL) AND (EXISTS (SELECT 1 FROM "project_authorizations" WHERE "project_authorizations"."user_id" = 1 AND (project_authorizations.project_id = projects.id)) OR projects.visibility_level IN (0,10,20))
  ↳ app/models/application_record.rb:17:in `pluck_primary_key'
  Issue Search (7.7ms) {index: "gitlab-development", type: "doc", body: {query: {bool: {must: [{simple_query_string: {fields: ["title^2", "description"], query: "*", default_operator: :and}}], filter: [{term: {type: "issue"}}, {has_parent: {parent_type: "project", query: {bool: {should: [[{bool: {filter: [{terms: {id: [1]}}, {terms: {"issues_access_level"=>[20, 10]}}]}}]]}}}}]}}, sort: [{updated_at: {order: :desc}}, :_score], highlight: {fields: {title: {}, description: {}}}}, routing: "project_1", size: 20, from: 0}
   (0.5ms)  SELECT COUNT(*) FROM "issues" WHERE "issues"."id" IN (443, 442, 441, 8, 7, 6, 5, 4, 3, 2, 1, 80, 81, 82, 83, 84, 85, 86, 87, 88)
  ↳ ee/lib/gitlab/elastic/search_results.rb:175:in `eager_load'
  Issue Load (0.5ms)  SELECT "issues".* FROM "issues" WHERE "issues"."id" IN (443, 442, 441, 8, 7, 6, 5, 4, 3, 2, 1, 80, 81, 82, 83, 84, 85, 86, 87, 88)
  ↳ ee/lib/gitlab/elastic/search_results.rb:175:in `eager_load'
  Project Load (0.6ms)  SELECT "projects".* FROM "projects" WHERE "projects"."id" = 1
  ↳ ee/lib/gitlab/elastic/search_results.rb:175:in `eager_load'
  Route Load (0.3ms)  SELECT "routes".* FROM "routes" WHERE "routes"."source_type" = 'Project' AND "routes"."source_id" = 1
  ↳ ee/lib/gitlab/elastic/search_results.rb:175:in `eager_load'
  Namespace Load (0.4ms)  SELECT "namespaces".* FROM "namespaces" WHERE "namespaces"."id" = 22
  ↳ ee/lib/gitlab/elastic/search_results.rb:175:in `eager_load'
  ProjectFeature Load (0.3ms)  SELECT "project_features".* FROM "project_features" WHERE "project_features"."project_id" = 1 LIMIT 1
  ↳ app/policies/project_policy.rb:539:in `feature_available?'
  Label Load (0.5ms)  SELECT "labels".* FROM "labels" INNER JOIN "label_links" ON "labels"."id" = "label_links"."label_id" WHERE "label_links"."target_id" = 443 AND "label_links"."target_type" = 'Issue' ORDER BY "labels"."title" ASC
  ↳ lib/api/entities/issue_basic.rb:13:in `map'
  User Load (0.6ms)  SELECT "users".* FROM "users" INNER JOIN "issue_assignees" ON "users"."id" = "issue_assignees"."user_id" WHERE "issue_assignees"."issue_id" = 443
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
  User Load (0.5ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 1 LIMIT 1
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
   (0.4ms)  SELECT COUNT(*) FROM "notes" WHERE "notes"."noteable_id" = 443 AND "notes"."noteable_type" = 'Issue' AND "notes"."system" = FALSE
  ↳ app/models/concerns/issuable.rb:375:in `user_notes_count'
   (0.7ms)  SELECT COUNT(*) FROM "merge_requests_closing_issues" INNER JOIN "merge_requests" ON "merge_requests"."id" = "merge_requests_closing_issues"."merge_request_id" INNER JOIN project_features ON merge_requests.target_project_id = project_features.project_id WHERE "merge_requests_closing_issues"."issue_id" = 443 AND (project_features.merge_requests_access_level >= 20)
  ↳ app/models/merge_requests_closing_issues.rb:32:in `count_for_issue'
   (0.3ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 443 AND "award_emoji"."awardable_type" = 'Issue' AND "award_emoji"."name" = 'thumbsup'
  ↳ app/models/concerns/awardable.rb:93:in `upvotes'
   (0.3ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 443 AND "award_emoji"."awardable_type" = 'Issue' AND "award_emoji"."name" = 'thumbsdown'
  ↳ app/models/concerns/awardable.rb:89:in `downvotes'
  Route Load (0.3ms)  SELECT "routes".* FROM "routes" WHERE "routes"."source_id" = 22 AND "routes"."source_type" = 'Namespace' LIMIT 1
  ↳ app/models/concerns/routable.rb:77:in `full_path'
  Timelog Load (0.2ms)  SELECT "timelogs".* FROM "timelogs" WHERE "timelogs"."issue_id" = 443
  ↳ lib/api/entities/issuable_time_stats.rb:21:in `map'
  Label Load (0.4ms)  SELECT "labels".* FROM "labels" INNER JOIN "label_links" ON "labels"."id" = "label_links"."label_id" WHERE "label_links"."target_id" = 2 AND "label_links"."target_type" = 'Issue' ORDER BY "labels"."title" ASC
  ↳ lib/api/entities/issue_basic.rb:13:in `map'
  Milestone Load (0.3ms)  SELECT "milestones".* FROM "milestones" WHERE "milestones"."id" = 4 LIMIT 1
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
  Project Load (0.5ms)  SELECT "projects".* FROM "projects" WHERE "projects"."id" = 1 LIMIT 1
  ↳ app/helpers/milestones_routing_helper.rb:16:in `milestone_url'
  Namespace Load (0.4ms)  SELECT "namespaces".* FROM "namespaces" WHERE "namespaces"."id" = 22 LIMIT 1
  ↳ config/application.rb:309:in `block (4 levels) in <class:Application>'
  Route Load (0.3ms)  SELECT "routes".* FROM "routes" WHERE "routes"."source_id" = 22 AND "routes"."source_type" = 'Namespace' LIMIT 1
  ↳ app/models/concerns/routable.rb:77:in `full_path'
  User Load (0.7ms)  SELECT "users".* FROM "users" INNER JOIN "issue_assignees" ON "users"."id" = "issue_assignees"."user_id" WHERE "issue_assignees"."issue_id" = 2
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
  User Load (0.5ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 15 LIMIT 1
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
   (0.3ms)  SELECT COUNT(*) FROM "notes" WHERE "notes"."noteable_id" = 2 AND "notes"."noteable_type" = 'Issue' AND "notes"."system" = FALSE
  ↳ app/models/concerns/issuable.rb:375:in `user_notes_count'
   (0.6ms)  SELECT COUNT(*) FROM "merge_requests_closing_issues" INNER JOIN "merge_requests" ON "merge_requests"."id" = "merge_requests_closing_issues"."merge_request_id" INNER JOIN project_features ON merge_requests.target_project_id = project_features.project_id WHERE "merge_requests_closing_issues"."issue_id" = 2 AND (project_features.merge_requests_access_level >= 20)
  ↳ app/models/merge_requests_closing_issues.rb:32:in `count_for_issue'
   (0.3ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 2 AND "award_emoji"."awardable_type" = 'Issue' AND "award_emoji"."name" = 'thumbsup'
  ↳ app/models/concerns/awardable.rb:93:in `upvotes'
   (0.2ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 2 AND "award_emoji"."awardable_type" = 'Issue' AND "award_emoji"."name" = 'thumbsdown'
  ↳ app/models/concerns/awardable.rb:89:in `downvotes'
  Timelog Load (0.2ms)  SELECT "timelogs".* FROM "timelogs" WHERE "timelogs"."issue_id" = 2
  ↳ lib/api/entities/issuable_time_stats.rb:21:in `map'
  Label Load (0.4ms)  SELECT "labels".* FROM "labels" INNER JOIN "label_links" ON "labels"."id" = "label_links"."label_id" WHERE "label_links"."target_id" = 3 AND "label_links"."target_type" = 'Issue' ORDER BY "labels"."title" ASC
  ↳ lib/api/entities/issue_basic.rb:13:in `map'
  Milestone Load (0.2ms)  SELECT "milestones".* FROM "milestones" WHERE "milestones"."id" = 5 LIMIT 1
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
  Project Load (0.5ms)  SELECT "projects".* FROM "projects" WHERE "projects"."id" = 1 LIMIT 1
  ↳ app/helpers/milestones_routing_helper.rb:16:in `milestone_url'
  Namespace Load (0.3ms)  SELECT "namespaces".* FROM "namespaces" WHERE "namespaces"."id" = 22 LIMIT 1
  ↳ config/application.rb:309:in `block (4 levels) in <class:Application>'
  Route Load (0.2ms)  SELECT "routes".* FROM "routes" WHERE "routes"."source_id" = 22 AND "routes"."source_type" = 'Namespace' LIMIT 1
  ↳ app/models/concerns/routable.rb:77:in `full_path'
  User Load (0.5ms)  SELECT "users".* FROM "users" INNER JOIN "issue_assignees" ON "users"."id" = "issue_assignees"."user_id" WHERE "issue_assignees"."issue_id" = 3
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
  User Load (0.4ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 1 LIMIT 1
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
   (0.3ms)  SELECT COUNT(*) FROM "notes" WHERE "notes"."noteable_id" = 3 AND "notes"."noteable_type" = 'Issue' AND "notes"."system" = FALSE
  ↳ app/models/concerns/issuable.rb:375:in `user_notes_count'
   (0.5ms)  SELECT COUNT(*) FROM "merge_requests_closing_issues" INNER JOIN "merge_requests" ON "merge_requests"."id" = "merge_requests_closing_issues"."merge_request_id" INNER JOIN project_features ON merge_requests.target_project_id = project_features.project_id WHERE "merge_requests_closing_issues"."issue_id" = 3 AND (project_features.merge_requests_access_level >= 20)
  ↳ app/models/merge_requests_closing_issues.rb:32:in `count_for_issue'
   (0.2ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 3 AND "award_emoji"."awardable_type" = 'Issue' AND "award_emoji"."name" = 'thumbsup'
  ↳ app/models/concerns/awardable.rb:93:in `upvotes'
   (0.2ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 3 AND "award_emoji"."awardable_type" = 'Issue' AND "award_emoji"."name" = 'thumbsdown'
  ↳ app/models/concerns/awardable.rb:89:in `downvotes'
  Timelog Load (0.2ms)  SELECT "timelogs".* FROM "timelogs" WHERE "timelogs"."issue_id" = 3
  ↳ lib/api/entities/issuable_time_stats.rb:21:in `map'
  Label Load (0.3ms)  SELECT "labels".* FROM "labels" INNER JOIN "label_links" ON "labels"."id" = "label_links"."label_id" WHERE "label_links"."target_id" = 4 AND "label_links"."target_type" = 'Issue' ORDER BY "labels"."title" ASC
  ↳ lib/api/entities/issue_basic.rb:13:in `map'
  Milestone Load (0.2ms)  SELECT "milestones".* FROM "milestones" WHERE "milestones"."id" = 3 LIMIT 1
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
  Project Load (0.6ms)  SELECT "projects".* FROM "projects" WHERE "projects"."id" = 1 LIMIT 1
  ↳ app/helpers/milestones_routing_helper.rb:16:in `milestone_url'
  Namespace Load (0.3ms)  SELECT "namespaces".* FROM "namespaces" WHERE "namespaces"."id" = 22 LIMIT 1
  ↳ config/application.rb:309:in `block (4 levels) in <class:Application>'
  Route Load (0.3ms)  SELECT "routes".* FROM "routes" WHERE "routes"."source_id" = 22 AND "routes"."source_type" = 'Namespace' LIMIT 1
  ↳ app/models/concerns/routable.rb:77:in `full_path'
  User Load (0.5ms)  SELECT "users".* FROM "users" INNER JOIN "issue_assignees" ON "users"."id" = "issue_assignees"."user_id" WHERE "issue_assignees"."issue_id" = 4
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
  User Load (0.3ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 16 LIMIT 1
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
   (0.2ms)  SELECT COUNT(*) FROM "notes" WHERE "notes"."noteable_id" = 4 AND "notes"."noteable_type" = 'Issue' AND "notes"."system" = FALSE
  ↳ app/models/concerns/issuable.rb:375:in `user_notes_count'
   (0.4ms)  SELECT COUNT(*) FROM "merge_requests_closing_issues" INNER JOIN "merge_requests" ON "merge_requests"."id" = "merge_requests_closing_issues"."merge_request_id" INNER JOIN project_features ON merge_requests.target_project_id = project_features.project_id WHERE "merge_requests_closing_issues"."issue_id" = 4 AND (project_features.merge_requests_access_level >= 20)
  ↳ app/models/merge_requests_closing_issues.rb:32:in `count_for_issue'
   (0.2ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 4 AND "award_emoji"."awardable_type" = 'Issue' AND "award_emoji"."name" = 'thumbsup'
  ↳ app/models/concerns/awardable.rb:93:in `upvotes'
   (0.2ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 4 AND "award_emoji"."awardable_type" = 'Issue' AND "award_emoji"."name" = 'thumbsdown'
  ↳ app/models/concerns/awardable.rb:89:in `downvotes'
  Timelog Load (0.3ms)  SELECT "timelogs".* FROM "timelogs" WHERE "timelogs"."issue_id" = 4
  ↳ lib/api/entities/issuable_time_stats.rb:21:in `map'
  Label Load (0.7ms)  SELECT "labels".* FROM "labels" INNER JOIN "label_links" ON "labels"."id" = "label_links"."label_id" WHERE "label_links"."target_id" = 5 AND "label_links"."target_type" = 'Issue' ORDER BY "labels"."title" ASC
  ↳ lib/api/entities/issue_basic.rb:13:in `map'
  Milestone Load (0.4ms)  SELECT "milestones".* FROM "milestones" WHERE "milestones"."id" = 3 LIMIT 1
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
  Project Load (0.8ms)  SELECT "projects".* FROM "projects" WHERE "projects"."id" = 1 LIMIT 1
  ↳ app/helpers/milestones_routing_helper.rb:16:in `milestone_url'
  Namespace Load (0.3ms)  SELECT "namespaces".* FROM "namespaces" WHERE "namespaces"."id" = 22 LIMIT 1
  ↳ config/application.rb:309:in `block (4 levels) in <class:Application>'
  Route Load (0.2ms)  SELECT "routes".* FROM "routes" WHERE "routes"."source_id" = 22 AND "routes"."source_type" = 'Namespace' LIMIT 1
  ↳ app/models/concerns/routable.rb:77:in `full_path'
  User Load (0.4ms)  SELECT "users".* FROM "users" INNER JOIN "issue_assignees" ON "users"."id" = "issue_assignees"."user_id" WHERE "issue_assignees"."issue_id" = 5
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
  User Load (0.3ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 19 LIMIT 1
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
   (0.2ms)  SELECT COUNT(*) FROM "notes" WHERE "notes"."noteable_id" = 5 AND "notes"."noteable_type" = 'Issue' AND "notes"."system" = FALSE
  ↳ app/models/concerns/issuable.rb:375:in `user_notes_count'
   (0.4ms)  SELECT COUNT(*) FROM "merge_requests_closing_issues" INNER JOIN "merge_requests" ON "merge_requests"."id" = "merge_requests_closing_issues"."merge_request_id" INNER JOIN project_features ON merge_requests.target_project_id = project_features.project_id WHERE "merge_requests_closing_issues"."issue_id" = 5 AND (project_features.merge_requests_access_level >= 20)
  ↳ app/models/merge_requests_closing_issues.rb:32:in `count_for_issue'
   (0.2ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 5 AND "award_emoji"."awardable_type" = 'Issue' AND "award_emoji"."name" = 'thumbsup'
  ↳ app/models/concerns/awardable.rb:93:in `upvotes'
   (0.2ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 5 AND "award_emoji"."awardable_type" = 'Issue' AND "award_emoji"."name" = 'thumbsdown'
  ↳ app/models/concerns/awardable.rb:89:in `downvotes'
  Timelog Load (0.3ms)  SELECT "timelogs".* FROM "timelogs" WHERE "timelogs"."issue_id" = 5
  ↳ lib/api/entities/issuable_time_stats.rb:21:in `map'
  Label Load (0.4ms)  SELECT "labels".* FROM "labels" INNER JOIN "label_links" ON "labels"."id" = "label_links"."label_id" WHERE "label_links"."target_id" = 6 AND "label_links"."target_type" = 'Issue' ORDER BY "labels"."title" ASC
  ↳ lib/api/entities/issue_basic.rb:13:in `map'
  Milestone Load (0.2ms)  SELECT "milestones".* FROM "milestones" WHERE "milestones"."id" = 2 LIMIT 1
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
  Project Load (0.4ms)  SELECT "projects".* FROM "projects" WHERE "projects"."id" = 1 LIMIT 1
  ↳ app/helpers/milestones_routing_helper.rb:16:in `milestone_url'
  Namespace Load (0.3ms)  SELECT "namespaces".* FROM "namespaces" WHERE "namespaces"."id" = 22 LIMIT 1
  ↳ config/application.rb:309:in `block (4 levels) in <class:Application>'
  Route Load (0.2ms)  SELECT "routes".* FROM "routes" WHERE "routes"."source_id" = 22 AND "routes"."source_type" = 'Namespace' LIMIT 1
  ↳ app/models/concerns/routable.rb:77:in `full_path'
  User Load (0.5ms)  SELECT "users".* FROM "users" INNER JOIN "issue_assignees" ON "users"."id" = "issue_assignees"."user_id" WHERE "issue_assignees"."issue_id" = 6
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
  User Load (0.3ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 16 LIMIT 1
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
   (0.2ms)  SELECT COUNT(*) FROM "notes" WHERE "notes"."noteable_id" = 6 AND "notes"."noteable_type" = 'Issue' AND "notes"."system" = FALSE
  ↳ app/models/concerns/issuable.rb:375:in `user_notes_count'
   (0.4ms)  SELECT COUNT(*) FROM "merge_requests_closing_issues" INNER JOIN "merge_requests" ON "merge_requests"."id" = "merge_requests_closing_issues"."merge_request_id" INNER JOIN project_features ON merge_requests.target_project_id = project_features.project_id WHERE "merge_requests_closing_issues"."issue_id" = 6 AND (project_features.merge_requests_access_level >= 20)
  ↳ app/models/merge_requests_closing_issues.rb:32:in `count_for_issue'
   (0.3ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 6 AND "award_emoji"."awardable_type" = 'Issue' AND "award_emoji"."name" = 'thumbsup'
  ↳ app/models/concerns/awardable.rb:93:in `upvotes'
   (0.2ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 6 AND "award_emoji"."awardable_type" = 'Issue' AND "award_emoji"."name" = 'thumbsdown'
  ↳ app/models/concerns/awardable.rb:89:in `downvotes'
  Timelog Load (0.2ms)  SELECT "timelogs".* FROM "timelogs" WHERE "timelogs"."issue_id" = 6
  ↳ lib/api/entities/issuable_time_stats.rb:21:in `map'
  Label Load (0.3ms)  SELECT "labels".* FROM "labels" INNER JOIN "label_links" ON "labels"."id" = "label_links"."label_id" WHERE "label_links"."target_id" = 7 AND "label_links"."target_type" = 'Issue' ORDER BY "labels"."title" ASC
  ↳ lib/api/entities/issue_basic.rb:13:in `map'
  Milestone Load (0.2ms)  SELECT "milestones".* FROM "milestones" WHERE "milestones"."id" = 4 LIMIT 1
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
  Project Load (0.4ms)  SELECT "projects".* FROM "projects" WHERE "projects"."id" = 1 LIMIT 1
  ↳ app/helpers/milestones_routing_helper.rb:16:in `milestone_url'
  Namespace Load (0.3ms)  SELECT "namespaces".* FROM "namespaces" WHERE "namespaces"."id" = 22 LIMIT 1
  ↳ config/application.rb:309:in `block (4 levels) in <class:Application>'
  Route Load (0.2ms)  SELECT "routes".* FROM "routes" WHERE "routes"."source_id" = 22 AND "routes"."source_type" = 'Namespace' LIMIT 1
  ↳ app/models/concerns/routable.rb:77:in `full_path'
  User Load (0.4ms)  SELECT "users".* FROM "users" INNER JOIN "issue_assignees" ON "users"."id" = "issue_assignees"."user_id" WHERE "issue_assignees"."issue_id" = 7
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
  User Load (0.3ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 20 LIMIT 1
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
   (0.5ms)  SELECT COUNT(*) FROM "notes" WHERE "notes"."noteable_id" = 7 AND "notes"."noteable_type" = 'Issue' AND "notes"."system" = FALSE
  ↳ app/models/concerns/issuable.rb:375:in `user_notes_count'
   (0.7ms)  SELECT COUNT(*) FROM "merge_requests_closing_issues" INNER JOIN "merge_requests" ON "merge_requests"."id" = "merge_requests_closing_issues"."merge_request_id" INNER JOIN project_features ON merge_requests.target_project_id = project_features.project_id WHERE "merge_requests_closing_issues"."issue_id" = 7 AND (project_features.merge_requests_access_level >= 20)
  ↳ app/models/merge_requests_closing_issues.rb:32:in `count_for_issue'
   (0.4ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 7 AND "award_emoji"."awardable_type" = 'Issue' AND "award_emoji"."name" = 'thumbsup'
  ↳ app/models/concerns/awardable.rb:93:in `upvotes'
   (0.2ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 7 AND "award_emoji"."awardable_type" = 'Issue' AND "award_emoji"."name" = 'thumbsdown'
  ↳ app/models/concerns/awardable.rb:89:in `downvotes'
  Timelog Load (0.2ms)  SELECT "timelogs".* FROM "timelogs" WHERE "timelogs"."issue_id" = 7
  ↳ lib/api/entities/issuable_time_stats.rb:21:in `map'
  Label Load (0.3ms)  SELECT "labels".* FROM "labels" INNER JOIN "label_links" ON "labels"."id" = "label_links"."label_id" WHERE "label_links"."target_id" = 8 AND "label_links"."target_type" = 'Issue' ORDER BY "labels"."title" ASC
  ↳ lib/api/entities/issue_basic.rb:13:in `map'
  Milestone Load (0.2ms)  SELECT "milestones".* FROM "milestones" WHERE "milestones"."id" = 4 LIMIT 1
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
  Project Load (0.4ms)  SELECT "projects".* FROM "projects" WHERE "projects"."id" = 1 LIMIT 1
  ↳ app/helpers/milestones_routing_helper.rb:16:in `milestone_url'
  Namespace Load (0.3ms)  SELECT "namespaces".* FROM "namespaces" WHERE "namespaces"."id" = 22 LIMIT 1
  ↳ config/application.rb:309:in `block (4 levels) in <class:Application>'
  Route Load (0.2ms)  SELECT "routes".* FROM "routes" WHERE "routes"."source_id" = 22 AND "routes"."source_type" = 'Namespace' LIMIT 1
  ↳ app/models/concerns/routable.rb:77:in `full_path'
  User Load (0.5ms)  SELECT "users".* FROM "users" INNER JOIN "issue_assignees" ON "users"."id" = "issue_assignees"."user_id" WHERE "issue_assignees"."issue_id" = 8
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
  User Load (0.3ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 1 LIMIT 1
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
   (0.2ms)  SELECT COUNT(*) FROM "notes" WHERE "notes"."noteable_id" = 8 AND "notes"."noteable_type" = 'Issue' AND "notes"."system" = FALSE
  ↳ app/models/concerns/issuable.rb:375:in `user_notes_count'
   (0.8ms)  SELECT COUNT(*) FROM "merge_requests_closing_issues" INNER JOIN "merge_requests" ON "merge_requests"."id" = "merge_requests_closing_issues"."merge_request_id" INNER JOIN project_features ON merge_requests.target_project_id = project_features.project_id WHERE "merge_requests_closing_issues"."issue_id" = 8 AND (project_features.merge_requests_access_level >= 20)
  ↳ app/models/merge_requests_closing_issues.rb:32:in `count_for_issue'
   (0.2ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 8 AND "award_emoji"."awardable_type" = 'Issue' AND "award_emoji"."name" = 'thumbsup'
  ↳ app/models/concerns/awardable.rb:93:in `upvotes'
   (0.2ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 8 AND "award_emoji"."awardable_type" = 'Issue' AND "award_emoji"."name" = 'thumbsdown'
  ↳ app/models/concerns/awardable.rb:89:in `downvotes'
  Timelog Load (0.2ms)  SELECT "timelogs".* FROM "timelogs" WHERE "timelogs"."issue_id" = 8
  ↳ lib/api/entities/issuable_time_stats.rb:21:in `map'
  User Load (0.3ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 1 LIMIT 1
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
  Label Load (0.3ms)  SELECT "labels".* FROM "labels" INNER JOIN "label_links" ON "labels"."id" = "label_links"."label_id" WHERE "label_links"."target_id" = 80 AND "label_links"."target_type" = 'Issue' ORDER BY "labels"."title" ASC
  ↳ lib/api/entities/issue_basic.rb:13:in `map'
  Milestone Load (0.2ms)  SELECT "milestones".* FROM "milestones" WHERE "milestones"."id" = 41 LIMIT 1
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
  Project Load (0.4ms)  SELECT "projects".* FROM "projects" WHERE "projects"."id" = 1 LIMIT 1
  ↳ app/helpers/milestones_routing_helper.rb:16:in `milestone_url'
  Namespace Load (0.3ms)  SELECT "namespaces".* FROM "namespaces" WHERE "namespaces"."id" = 22 LIMIT 1
  ↳ config/application.rb:309:in `block (4 levels) in <class:Application>'
  Route Load (0.2ms)  SELECT "routes".* FROM "routes" WHERE "routes"."source_id" = 22 AND "routes"."source_type" = 'Namespace' LIMIT 1
  ↳ app/models/concerns/routable.rb:77:in `full_path'
  User Load (0.4ms)  SELECT "users".* FROM "users" INNER JOIN "issue_assignees" ON "users"."id" = "issue_assignees"."user_id" WHERE "issue_assignees"."issue_id" = 80
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
  User Load (0.3ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 20 LIMIT 1
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
   (0.3ms)  SELECT COUNT(*) FROM "notes" WHERE "notes"."noteable_id" = 80 AND "notes"."noteable_type" = 'Issue' AND "notes"."system" = FALSE
  ↳ app/models/concerns/issuable.rb:375:in `user_notes_count'
   (0.5ms)  SELECT COUNT(*) FROM "merge_requests_closing_issues" INNER JOIN "merge_requests" ON "merge_requests"."id" = "merge_requests_closing_issues"."merge_request_id" INNER JOIN project_features ON merge_requests.target_project_id = project_features.project_id WHERE "merge_requests_closing_issues"."issue_id" = 80 AND (project_features.merge_requests_access_level >= 20)
  ↳ app/models/merge_requests_closing_issues.rb:32:in `count_for_issue'
   (0.2ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 80 AND "award_emoji"."awardable_type" = 'Issue' AND "award_emoji"."name" = 'thumbsup'
  ↳ app/models/concerns/awardable.rb:93:in `upvotes'
   (0.2ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 80 AND "award_emoji"."awardable_type" = 'Issue' AND "award_emoji"."name" = 'thumbsdown'
  ↳ app/models/concerns/awardable.rb:89:in `downvotes'
  Timelog Load (0.2ms)  SELECT "timelogs".* FROM "timelogs" WHERE "timelogs"."issue_id" = 80
  ↳ lib/api/entities/issuable_time_stats.rb:21:in `map'
  User Load (0.3ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 15 LIMIT 1
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
  Label Load (0.3ms)  SELECT "labels".* FROM "labels" INNER JOIN "label_links" ON "labels"."id" = "label_links"."label_id" WHERE "label_links"."target_id" = 81 AND "label_links"."target_type" = 'Issue' ORDER BY "labels"."title" ASC
  ↳ lib/api/entities/issue_basic.rb:13:in `map'
  Milestone Load (0.2ms)  SELECT "milestones".* FROM "milestones" WHERE "milestones"."id" = 41 LIMIT 1
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
  Project Load (0.4ms)  SELECT "projects".* FROM "projects" WHERE "projects"."id" = 1 LIMIT 1
  ↳ app/helpers/milestones_routing_helper.rb:16:in `milestone_url'
  Namespace Load (0.3ms)  SELECT "namespaces".* FROM "namespaces" WHERE "namespaces"."id" = 22 LIMIT 1
  ↳ config/application.rb:309:in `block (4 levels) in <class:Application>'
  Route Load (0.2ms)  SELECT "routes".* FROM "routes" WHERE "routes"."source_id" = 22 AND "routes"."source_type" = 'Namespace' LIMIT 1
  ↳ app/models/concerns/routable.rb:77:in `full_path'
  User Load (0.4ms)  SELECT "users".* FROM "users" INNER JOIN "issue_assignees" ON "users"."id" = "issue_assignees"."user_id" WHERE "issue_assignees"."issue_id" = 81
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
  User Load (0.3ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 19 LIMIT 1
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
   (0.3ms)  SELECT COUNT(*) FROM "notes" WHERE "notes"."noteable_id" = 81 AND "notes"."noteable_type" = 'Issue' AND "notes"."system" = FALSE
  ↳ app/models/concerns/issuable.rb:375:in `user_notes_count'
   (0.5ms)  SELECT COUNT(*) FROM "merge_requests_closing_issues" INNER JOIN "merge_requests" ON "merge_requests"."id" = "merge_requests_closing_issues"."merge_request_id" INNER JOIN project_features ON merge_requests.target_project_id = project_features.project_id WHERE "merge_requests_closing_issues"."issue_id" = 81 AND (project_features.merge_requests_access_level >= 20)
  ↳ app/models/merge_requests_closing_issues.rb:32:in `count_for_issue'
   (0.3ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 81 AND "award_emoji"."awardable_type" = 'Issue' AND "award_emoji"."name" = 'thumbsup'
  ↳ app/models/concerns/awardable.rb:93:in `upvotes'
   (0.2ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 81 AND "award_emoji"."awardable_type" = 'Issue' AND "award_emoji"."name" = 'thumbsdown'
  ↳ app/models/concerns/awardable.rb:89:in `downvotes'
  Timelog Load (0.2ms)  SELECT "timelogs".* FROM "timelogs" WHERE "timelogs"."issue_id" = 81
  ↳ lib/api/entities/issuable_time_stats.rb:21:in `map'
  User Load (0.3ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 19 LIMIT 1
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
  Label Load (0.3ms)  SELECT "labels".* FROM "labels" INNER JOIN "label_links" ON "labels"."id" = "label_links"."label_id" WHERE "label_links"."target_id" = 82 AND "label_links"."target_type" = 'Issue' ORDER BY "labels"."title" ASC
  ↳ lib/api/entities/issue_basic.rb:13:in `map'
  Milestone Load (0.4ms)  SELECT "milestones".* FROM "milestones" WHERE "milestones"."id" = 41 LIMIT 1
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
  Project Load (0.4ms)  SELECT "projects".* FROM "projects" WHERE "projects"."id" = 1 LIMIT 1
  ↳ app/helpers/milestones_routing_helper.rb:16:in `milestone_url'
  Namespace Load (0.3ms)  SELECT "namespaces".* FROM "namespaces" WHERE "namespaces"."id" = 22 LIMIT 1
  ↳ config/application.rb:309:in `block (4 levels) in <class:Application>'
  Route Load (0.2ms)  SELECT "routes".* FROM "routes" WHERE "routes"."source_id" = 22 AND "routes"."source_type" = 'Namespace' LIMIT 1
  ↳ app/models/concerns/routable.rb:77:in `full_path'
  User Load (0.7ms)  SELECT "users".* FROM "users" INNER JOIN "issue_assignees" ON "users"."id" = "issue_assignees"."user_id" WHERE "issue_assignees"."issue_id" = 82
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
  User Load (0.6ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 15 LIMIT 1
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
   (0.3ms)  SELECT COUNT(*) FROM "notes" WHERE "notes"."noteable_id" = 82 AND "notes"."noteable_type" = 'Issue' AND "notes"."system" = FALSE
  ↳ app/models/concerns/issuable.rb:375:in `user_notes_count'
   (0.5ms)  SELECT COUNT(*) FROM "merge_requests_closing_issues" INNER JOIN "merge_requests" ON "merge_requests"."id" = "merge_requests_closing_issues"."merge_request_id" INNER JOIN project_features ON merge_requests.target_project_id = project_features.project_id WHERE "merge_requests_closing_issues"."issue_id" = 82 AND (project_features.merge_requests_access_level >= 20)
  ↳ app/models/merge_requests_closing_issues.rb:32:in `count_for_issue'
   (0.2ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 82 AND "award_emoji"."awardable_type" = 'Issue' AND "award_emoji"."name" = 'thumbsup'
  ↳ app/models/concerns/awardable.rb:93:in `upvotes'
   (0.2ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 82 AND "award_emoji"."awardable_type" = 'Issue' AND "award_emoji"."name" = 'thumbsdown'
  ↳ app/models/concerns/awardable.rb:89:in `downvotes'
  Timelog Load (0.2ms)  SELECT "timelogs".* FROM "timelogs" WHERE "timelogs"."issue_id" = 82
  ↳ lib/api/entities/issuable_time_stats.rb:21:in `map'
  User Load (0.3ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 1 LIMIT 1
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
  Label Load (0.3ms)  SELECT "labels".* FROM "labels" INNER JOIN "label_links" ON "labels"."id" = "label_links"."label_id" WHERE "label_links"."target_id" = 83 AND "label_links"."target_type" = 'Issue' ORDER BY "labels"."title" ASC
  ↳ lib/api/entities/issue_basic.rb:13:in `map'
  Milestone Load (0.2ms)  SELECT "milestones".* FROM "milestones" WHERE "milestones"."id" = 41 LIMIT 1
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
  Project Load (0.4ms)  SELECT "projects".* FROM "projects" WHERE "projects"."id" = 1 LIMIT 1
  ↳ app/helpers/milestones_routing_helper.rb:16:in `milestone_url'
  Namespace Load (0.3ms)  SELECT "namespaces".* FROM "namespaces" WHERE "namespaces"."id" = 22 LIMIT 1
  ↳ config/application.rb:309:in `block (4 levels) in <class:Application>'
  Route Load (0.2ms)  SELECT "routes".* FROM "routes" WHERE "routes"."source_id" = 22 AND "routes"."source_type" = 'Namespace' LIMIT 1
  ↳ app/models/concerns/routable.rb:77:in `full_path'
  User Load (0.5ms)  SELECT "users".* FROM "users" INNER JOIN "issue_assignees" ON "users"."id" = "issue_assignees"."user_id" WHERE "issue_assignees"."issue_id" = 83
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
  User Load (0.3ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 16 LIMIT 1
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
   (0.3ms)  SELECT COUNT(*) FROM "notes" WHERE "notes"."noteable_id" = 83 AND "notes"."noteable_type" = 'Issue' AND "notes"."system" = FALSE
  ↳ app/models/concerns/issuable.rb:375:in `user_notes_count'
   (0.5ms)  SELECT COUNT(*) FROM "merge_requests_closing_issues" INNER JOIN "merge_requests" ON "merge_requests"."id" = "merge_requests_closing_issues"."merge_request_id" INNER JOIN project_features ON merge_requests.target_project_id = project_features.project_id WHERE "merge_requests_closing_issues"."issue_id" = 83 AND (project_features.merge_requests_access_level >= 20)
  ↳ app/models/merge_requests_closing_issues.rb:32:in `count_for_issue'
   (0.2ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 83 AND "award_emoji"."awardable_type" = 'Issue' AND "award_emoji"."name" = 'thumbsup'
  ↳ app/models/concerns/awardable.rb:93:in `upvotes'
   (0.2ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 83 AND "award_emoji"."awardable_type" = 'Issue' AND "award_emoji"."name" = 'thumbsdown'
  ↳ app/models/concerns/awardable.rb:89:in `downvotes'
  Timelog Load (0.2ms)  SELECT "timelogs".* FROM "timelogs" WHERE "timelogs"."issue_id" = 83
  ↳ lib/api/entities/issuable_time_stats.rb:21:in `map'
  User Load (0.4ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 16 LIMIT 1
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
  Label Load (0.4ms)  SELECT "labels".* FROM "labels" INNER JOIN "label_links" ON "labels"."id" = "label_links"."label_id" WHERE "label_links"."target_id" = 84 AND "label_links"."target_type" = 'Issue' ORDER BY "labels"."title" ASC
  ↳ lib/api/entities/issue_basic.rb:13:in `map'
  Milestone Load (0.2ms)  SELECT "milestones".* FROM "milestones" WHERE "milestones"."id" = 41 LIMIT 1
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
  Project Load (0.6ms)  SELECT "projects".* FROM "projects" WHERE "projects"."id" = 1 LIMIT 1
  ↳ app/helpers/milestones_routing_helper.rb:16:in `milestone_url'
  Namespace Load (0.3ms)  SELECT "namespaces".* FROM "namespaces" WHERE "namespaces"."id" = 22 LIMIT 1
  ↳ config/application.rb:309:in `block (4 levels) in <class:Application>'
  Route Load (0.2ms)  SELECT "routes".* FROM "routes" WHERE "routes"."source_id" = 22 AND "routes"."source_type" = 'Namespace' LIMIT 1
  ↳ app/models/concerns/routable.rb:77:in `full_path'
  User Load (0.5ms)  SELECT "users".* FROM "users" INNER JOIN "issue_assignees" ON "users"."id" = "issue_assignees"."user_id" WHERE "issue_assignees"."issue_id" = 84
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
  User Load (0.3ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 19 LIMIT 1
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
   (0.3ms)  SELECT COUNT(*) FROM "notes" WHERE "notes"."noteable_id" = 84 AND "notes"."noteable_type" = 'Issue' AND "notes"."system" = FALSE
  ↳ app/models/concerns/issuable.rb:375:in `user_notes_count'
   (0.4ms)  SELECT COUNT(*) FROM "merge_requests_closing_issues" INNER JOIN "merge_requests" ON "merge_requests"."id" = "merge_requests_closing_issues"."merge_request_id" INNER JOIN project_features ON merge_requests.target_project_id = project_features.project_id WHERE "merge_requests_closing_issues"."issue_id" = 84 AND (project_features.merge_requests_access_level >= 20)
  ↳ app/models/merge_requests_closing_issues.rb:32:in `count_for_issue'
   (0.2ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 84 AND "award_emoji"."awardable_type" = 'Issue' AND "award_emoji"."name" = 'thumbsup'
  ↳ app/models/concerns/awardable.rb:93:in `upvotes'
   (0.2ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 84 AND "award_emoji"."awardable_type" = 'Issue' AND "award_emoji"."name" = 'thumbsdown'
  ↳ app/models/concerns/awardable.rb:89:in `downvotes'
  Timelog Load (0.2ms)  SELECT "timelogs".* FROM "timelogs" WHERE "timelogs"."issue_id" = 84
  ↳ lib/api/entities/issuable_time_stats.rb:21:in `map'
  User Load (0.3ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 16 LIMIT 1
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
  Label Load (0.6ms)  SELECT "labels".* FROM "labels" INNER JOIN "label_links" ON "labels"."id" = "label_links"."label_id" WHERE "label_links"."target_id" = 85 AND "label_links"."target_type" = 'Issue' ORDER BY "labels"."title" ASC
  ↳ lib/api/entities/issue_basic.rb:13:in `map'
  Milestone Load (0.3ms)  SELECT "milestones".* FROM "milestones" WHERE "milestones"."id" = 41 LIMIT 1
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
  Project Load (0.5ms)  SELECT "projects".* FROM "projects" WHERE "projects"."id" = 1 LIMIT 1
  ↳ app/helpers/milestones_routing_helper.rb:16:in `milestone_url'
  Namespace Load (0.3ms)  SELECT "namespaces".* FROM "namespaces" WHERE "namespaces"."id" = 22 LIMIT 1
  ↳ config/application.rb:309:in `block (4 levels) in <class:Application>'
  Route Load (0.4ms)  SELECT "routes".* FROM "routes" WHERE "routes"."source_id" = 22 AND "routes"."source_type" = 'Namespace' LIMIT 1
  ↳ app/models/concerns/routable.rb:77:in `full_path'
  User Load (0.7ms)  SELECT "users".* FROM "users" INNER JOIN "issue_assignees" ON "users"."id" = "issue_assignees"."user_id" WHERE "issue_assignees"."issue_id" = 85
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
  User Load (0.5ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 1 LIMIT 1
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
   (0.3ms)  SELECT COUNT(*) FROM "notes" WHERE "notes"."noteable_id" = 85 AND "notes"."noteable_type" = 'Issue' AND "notes"."system" = FALSE
  ↳ app/models/concerns/issuable.rb:375:in `user_notes_count'
   (0.6ms)  SELECT COUNT(*) FROM "merge_requests_closing_issues" INNER JOIN "merge_requests" ON "merge_requests"."id" = "merge_requests_closing_issues"."merge_request_id" INNER JOIN project_features ON merge_requests.target_project_id = project_features.project_id WHERE "merge_requests_closing_issues"."issue_id" = 85 AND (project_features.merge_requests_access_level >= 20)
  ↳ app/models/merge_requests_closing_issues.rb:32:in `count_for_issue'
   (0.3ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 85 AND "award_emoji"."awardable_type" = 'Issue' AND "award_emoji"."name" = 'thumbsup'
  ↳ app/models/concerns/awardable.rb:93:in `upvotes'
   (0.3ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 85 AND "award_emoji"."awardable_type" = 'Issue' AND "award_emoji"."name" = 'thumbsdown'
  ↳ app/models/concerns/awardable.rb:89:in `downvotes'
  Timelog Load (0.2ms)  SELECT "timelogs".* FROM "timelogs" WHERE "timelogs"."issue_id" = 85
  ↳ lib/api/entities/issuable_time_stats.rb:21:in `map'
  User Load (0.5ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 19 LIMIT 1
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
  Label Load (0.4ms)  SELECT "labels".* FROM "labels" INNER JOIN "label_links" ON "labels"."id" = "label_links"."label_id" WHERE "label_links"."target_id" = 86 AND "label_links"."target_type" = 'Issue' ORDER BY "labels"."title" ASC
  ↳ lib/api/entities/issue_basic.rb:13:in `map'
  Milestone Load (0.4ms)  SELECT "milestones".* FROM "milestones" WHERE "milestones"."id" = 41 LIMIT 1
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
  Project Load (0.6ms)  SELECT "projects".* FROM "projects" WHERE "projects"."id" = 1 LIMIT 1
  ↳ app/helpers/milestones_routing_helper.rb:16:in `milestone_url'
  Namespace Load (0.4ms)  SELECT "namespaces".* FROM "namespaces" WHERE "namespaces"."id" = 22 LIMIT 1
  ↳ config/application.rb:309:in `block (4 levels) in <class:Application>'
  Route Load (0.3ms)  SELECT "routes".* FROM "routes" WHERE "routes"."source_id" = 22 AND "routes"."source_type" = 'Namespace' LIMIT 1
  ↳ app/models/concerns/routable.rb:77:in `full_path'
  User Load (0.6ms)  SELECT "users".* FROM "users" INNER JOIN "issue_assignees" ON "users"."id" = "issue_assignees"."user_id" WHERE "issue_assignees"."issue_id" = 86
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
  User Load (0.5ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 20 LIMIT 1
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
   (0.3ms)  SELECT COUNT(*) FROM "notes" WHERE "notes"."noteable_id" = 86 AND "notes"."noteable_type" = 'Issue' AND "notes"."system" = FALSE
  ↳ app/models/concerns/issuable.rb:375:in `user_notes_count'
   (0.7ms)  SELECT COUNT(*) FROM "merge_requests_closing_issues" INNER JOIN "merge_requests" ON "merge_requests"."id" = "merge_requests_closing_issues"."merge_request_id" INNER JOIN project_features ON merge_requests.target_project_id = project_features.project_id WHERE "merge_requests_closing_issues"."issue_id" = 86 AND (project_features.merge_requests_access_level >= 20)
  ↳ app/models/merge_requests_closing_issues.rb:32:in `count_for_issue'
   (0.3ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 86 AND "award_emoji"."awardable_type" = 'Issue' AND "award_emoji"."name" = 'thumbsup'
  ↳ app/models/concerns/awardable.rb:93:in `upvotes'
   (0.3ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 86 AND "award_emoji"."awardable_type" = 'Issue' AND "award_emoji"."name" = 'thumbsdown'
  ↳ app/models/concerns/awardable.rb:89:in `downvotes'
  Timelog Load (0.3ms)  SELECT "timelogs".* FROM "timelogs" WHERE "timelogs"."issue_id" = 86
  ↳ lib/api/entities/issuable_time_stats.rb:21:in `map'
  User Load (0.5ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 21 LIMIT 1
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
  Label Load (0.4ms)  SELECT "labels".* FROM "labels" INNER JOIN "label_links" ON "labels"."id" = "label_links"."label_id" WHERE "label_links"."target_id" = 87 AND "label_links"."target_type" = 'Issue' ORDER BY "labels"."title" ASC
  ↳ lib/api/entities/issue_basic.rb:13:in `map'
  Milestone Load (0.3ms)  SELECT "milestones".* FROM "milestones" WHERE "milestones"."id" = 41 LIMIT 1
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
  Project Load (0.6ms)  SELECT "projects".* FROM "projects" WHERE "projects"."id" = 1 LIMIT 1
  ↳ app/helpers/milestones_routing_helper.rb:16:in `milestone_url'
  Namespace Load (0.4ms)  SELECT "namespaces".* FROM "namespaces" WHERE "namespaces"."id" = 22 LIMIT 1
  ↳ config/application.rb:309:in `block (4 levels) in <class:Application>'
  Route Load (0.3ms)  SELECT "routes".* FROM "routes" WHERE "routes"."source_id" = 22 AND "routes"."source_type" = 'Namespace' LIMIT 1
  ↳ app/models/concerns/routable.rb:77:in `full_path'
  User Load (0.6ms)  SELECT "users".* FROM "users" INNER JOIN "issue_assignees" ON "users"."id" = "issue_assignees"."user_id" WHERE "issue_assignees"."issue_id" = 87
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
  User Load (0.5ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 15 LIMIT 1
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
   (0.3ms)  SELECT COUNT(*) FROM "notes" WHERE "notes"."noteable_id" = 87 AND "notes"."noteable_type" = 'Issue' AND "notes"."system" = FALSE
  ↳ app/models/concerns/issuable.rb:375:in `user_notes_count'
   (0.6ms)  SELECT COUNT(*) FROM "merge_requests_closing_issues" INNER JOIN "merge_requests" ON "merge_requests"."id" = "merge_requests_closing_issues"."merge_request_id" INNER JOIN project_features ON merge_requests.target_project_id = project_features.project_id WHERE "merge_requests_closing_issues"."issue_id" = 87 AND (project_features.merge_requests_access_level >= 20)
  ↳ app/models/merge_requests_closing_issues.rb:32:in `count_for_issue'
   (0.2ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 87 AND "award_emoji"."awardable_type" = 'Issue' AND "award_emoji"."name" = 'thumbsup'
  ↳ app/models/concerns/awardable.rb:93:in `upvotes'
   (0.2ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 87 AND "award_emoji"."awardable_type" = 'Issue' AND "award_emoji"."name" = 'thumbsdown'
  ↳ app/models/concerns/awardable.rb:89:in `downvotes'
  Timelog Load (0.2ms)  SELECT "timelogs".* FROM "timelogs" WHERE "timelogs"."issue_id" = 87
  ↳ lib/api/entities/issuable_time_stats.rb:21:in `map'
  User Load (0.4ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 20 LIMIT 1
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
  Label Load (0.4ms)  SELECT "labels".* FROM "labels" INNER JOIN "label_links" ON "labels"."id" = "label_links"."label_id" WHERE "label_links"."target_id" = 88 AND "label_links"."target_type" = 'Issue' ORDER BY "labels"."title" ASC
  ↳ lib/api/entities/issue_basic.rb:13:in `map'
  Milestone Load (0.2ms)  SELECT "milestones".* FROM "milestones" WHERE "milestones"."id" = 41 LIMIT 1
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
  Project Load (0.5ms)  SELECT "projects".* FROM "projects" WHERE "projects"."id" = 1 LIMIT 1
  ↳ app/helpers/milestones_routing_helper.rb:16:in `milestone_url'
  Namespace Load (0.3ms)  SELECT "namespaces".* FROM "namespaces" WHERE "namespaces"."id" = 22 LIMIT 1
  ↳ config/application.rb:309:in `block (4 levels) in <class:Application>'
  Route Load (0.2ms)  SELECT "routes".* FROM "routes" WHERE "routes"."source_id" = 22 AND "routes"."source_type" = 'Namespace' LIMIT 1
  ↳ app/models/concerns/routable.rb:77:in `full_path'
  User Load (0.5ms)  SELECT "users".* FROM "users" INNER JOIN "issue_assignees" ON "users"."id" = "issue_assignees"."user_id" WHERE "issue_assignees"."issue_id" = 88
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
  User Load (0.4ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 15 LIMIT 1
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
   (0.3ms)  SELECT COUNT(*) FROM "notes" WHERE "notes"."noteable_id" = 88 AND "notes"."noteable_type" = 'Issue' AND "notes"."system" = FALSE
  ↳ app/models/concerns/issuable.rb:375:in `user_notes_count'
   (0.5ms)  SELECT COUNT(*) FROM "merge_requests_closing_issues" INNER JOIN "merge_requests" ON "merge_requests"."id" = "merge_requests_closing_issues"."merge_request_id" INNER JOIN project_features ON merge_requests.target_project_id = project_features.project_id WHERE "merge_requests_closing_issues"."issue_id" = 88 AND (project_features.merge_requests_access_level >= 20)
  ↳ app/models/merge_requests_closing_issues.rb:32:in `count_for_issue'
   (0.2ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 88 AND "award_emoji"."awardable_type" = 'Issue' AND "award_emoji"."name" = 'thumbsup'
  ↳ app/models/concerns/awardable.rb:93:in `upvotes'
   (0.2ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 88 AND "award_emoji"."awardable_type" = 'Issue' AND "award_emoji"."name" = 'thumbsdown'
  ↳ app/models/concerns/awardable.rb:89:in `downvotes'
  Timelog Load (0.2ms)  SELECT "timelogs".* FROM "timelogs" WHERE "timelogs"."issue_id" = 88
  ↳ lib/api/entities/issuable_time_stats.rb:21:in `map'
  Label Load (0.4ms)  SELECT "labels".* FROM "labels" INNER JOIN "label_links" ON "labels"."id" = "label_links"."label_id" WHERE "label_links"."target_id" = 441 AND "label_links"."target_type" = 'Issue' ORDER BY "labels"."title" ASC
  ↳ lib/api/entities/issue_basic.rb:13:in `map'
  User Load (0.5ms)  SELECT "users".* FROM "users" INNER JOIN "issue_assignees" ON "users"."id" = "issue_assignees"."user_id" WHERE "issue_assignees"."issue_id" = 441
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
  User Load (0.4ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 1 LIMIT 1
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
   (0.4ms)  SELECT COUNT(*) FROM "notes" WHERE "notes"."noteable_id" = 441 AND "notes"."noteable_type" = 'Issue' AND "notes"."system" = FALSE
  ↳ app/models/concerns/issuable.rb:375:in `user_notes_count'
   (0.5ms)  SELECT COUNT(*) FROM "merge_requests_closing_issues" INNER JOIN "merge_requests" ON "merge_requests"."id" = "merge_requests_closing_issues"."merge_request_id" INNER JOIN project_features ON merge_requests.target_project_id = project_features.project_id WHERE "merge_requests_closing_issues"."issue_id" = 441 AND (project_features.merge_requests_access_level >= 20)
  ↳ app/models/merge_requests_closing_issues.rb:32:in `count_for_issue'
   (0.3ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 441 AND "award_emoji"."awardable_type" = 'Issue' AND "award_emoji"."name" = 'thumbsup'
  ↳ app/models/concerns/awardable.rb:93:in `upvotes'
   (0.2ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 441 AND "award_emoji"."awardable_type" = 'Issue' AND "award_emoji"."name" = 'thumbsdown'
  ↳ app/models/concerns/awardable.rb:89:in `downvotes'
  Timelog Load (0.2ms)  SELECT "timelogs".* FROM "timelogs" WHERE "timelogs"."issue_id" = 441
  ↳ lib/api/entities/issuable_time_stats.rb:21:in `map'
  Label Load (0.4ms)  SELECT "labels".* FROM "labels" INNER JOIN "label_links" ON "labels"."id" = "label_links"."label_id" WHERE "label_links"."target_id" = 442 AND "label_links"."target_type" = 'Issue' ORDER BY "labels"."title" ASC
  ↳ lib/api/entities/issue_basic.rb:13:in `map'
  User Load (0.5ms)  SELECT "users".* FROM "users" INNER JOIN "issue_assignees" ON "users"."id" = "issue_assignees"."user_id" WHERE "issue_assignees"."issue_id" = 442
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
  User Load (0.4ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 1 LIMIT 1
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
   (0.3ms)  SELECT COUNT(*) FROM "notes" WHERE "notes"."noteable_id" = 442 AND "notes"."noteable_type" = 'Issue' AND "notes"."system" = FALSE
  ↳ app/models/concerns/issuable.rb:375:in `user_notes_count'
   (0.5ms)  SELECT COUNT(*) FROM "merge_requests_closing_issues" INNER JOIN "merge_requests" ON "merge_requests"."id" = "merge_requests_closing_issues"."merge_request_id" INNER JOIN project_features ON merge_requests.target_project_id = project_features.project_id WHERE "merge_requests_closing_issues"."issue_id" = 442 AND (project_features.merge_requests_access_level >= 20)
  ↳ app/models/merge_requests_closing_issues.rb:32:in `count_for_issue'
   (0.2ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 442 AND "award_emoji"."awardable_type" = 'Issue' AND "award_emoji"."name" = 'thumbsup'
  ↳ app/models/concerns/awardable.rb:93:in `upvotes'
   (0.2ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 442 AND "award_emoji"."awardable_type" = 'Issue' AND "award_emoji"."name" = 'thumbsdown'
  ↳ app/models/concerns/awardable.rb:89:in `downvotes'
  Timelog Load (0.2ms)  SELECT "timelogs".* FROM "timelogs" WHERE "timelogs"."issue_id" = 442
  ↳ lib/api/entities/issuable_time_stats.rb:21:in `map'
  Label Load (0.4ms)  SELECT "labels".* FROM "labels" INNER JOIN "label_links" ON "labels"."id" = "label_links"."label_id" WHERE "label_links"."target_id" = 1 AND "label_links"."target_type" = 'Issue' ORDER BY "labels"."title" ASC
  ↳ lib/api/entities/issue_basic.rb:13:in `map'
  Milestone Load (0.2ms)  SELECT "milestones".* FROM "milestones" WHERE "milestones"."id" = 2 LIMIT 1
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
  Project Load (0.5ms)  SELECT "projects".* FROM "projects" WHERE "projects"."id" = 1 LIMIT 1
  ↳ app/helpers/milestones_routing_helper.rb:16:in `milestone_url'
  Namespace Load (0.3ms)  SELECT "namespaces".* FROM "namespaces" WHERE "namespaces"."id" = 22 LIMIT 1
  ↳ config/application.rb:309:in `block (4 levels) in <class:Application>'
  Route Load (0.2ms)  SELECT "routes".* FROM "routes" WHERE "routes"."source_id" = 22 AND "routes"."source_type" = 'Namespace' LIMIT 1
  ↳ app/models/concerns/routable.rb:77:in `full_path'
  User Load (0.6ms)  SELECT "users".* FROM "users" INNER JOIN "issue_assignees" ON "users"."id" = "issue_assignees"."user_id" WHERE "issue_assignees"."issue_id" = 1
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
  User Load (0.4ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 16 LIMIT 1
  ↳ ee/lib/gitlab/middleware/ip_restrictor.rb:14:in `block in call'
   (0.3ms)  SELECT COUNT(*) FROM "notes" WHERE "notes"."noteable_id" = 1 AND "notes"."noteable_type" = 'Issue' AND "notes"."system" = FALSE
  ↳ app/models/concerns/issuable.rb:375:in `user_notes_count'
   (0.5ms)  SELECT COUNT(*) FROM "merge_requests_closing_issues" INNER JOIN "merge_requests" ON "merge_requests"."id" = "merge_requests_closing_issues"."merge_request_id" INNER JOIN project_features ON merge_requests.target_project_id = project_features.project_id WHERE "merge_requests_closing_issues"."issue_id" = 1 AND (project_features.merge_requests_access_level >= 20)
  ↳ app/models/merge_requests_closing_issues.rb:32:in `count_for_issue'
   (0.2ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 1 AND "award_emoji"."awardable_type" = 'Issue' AND "award_emoji"."name" = 'thumbsup'
  ↳ app/models/concerns/awardable.rb:93:in `upvotes'
   (0.2ms)  SELECT COUNT(*) FROM "award_emoji" WHERE "award_emoji"."awardable_id" = 1 AND "award_emoji"."awardable_type" = 'Issue' AND "award_emoji"."name" = 'thumbsdown'
  ↳ app/models/concerns/awardable.rb:89:in `downvotes'
  Timelog Load (0.2ms)  SELECT "timelogs".* FROM "timelogs" WHERE "timelogs"."issue_id" = 1
  ↳ lib/api/entities/issuable_time_stats.rb:21:in `map'

Optimizing this will all three levels, as they share eager-loading behaviour.

Edited by Alishan Ladhani