N+1 queries with /projects/:project_id/builds API endpoint
From https://gitlab.com/gitlab-com/infrastructure/issues/3534#note_54201421, we see a commonly-used endpoint is the /projects/:project_id/builds
endpoint. There are several N+1 queries from what I can tell:
- SQL output: http://profiler.gitlap.com/20180111/2d555bd9-eb2b-4279-85a0-4f01a8a17b12.txt.gz
- ruby-prof: http://profiler.gitlap.com/20180111/2d555bd9-eb2b-4279-85a0-4f01a8a17b12.html.gz
D, [2018-01-11T18:35:02.704977 #7654] DEBUG -- : Ci::JobArtifact Load (1.6ms) SELECT "ci_job_artifacts".* FROM "ci_job_artifacts" WHERE "ci_job_artifacts"."job_id" = 20451178 AND "ci_job_artifacts"."file_type" = 1 LIMIT 1 [["job_id", 20451178], ["file_type", 1]]
D, [2018-01-11T18:35:02.708507 #7654] DEBUG -- : ↳ app/models/concerns/artifact_migratable.rb:6:in `artifacts_file'
D, [2018-01-11T18:35:02.708718 #7654] DEBUG -- : ↳ app/models/concerns/artifact_migratable.rb:14:in `artifacts?'
D, [2018-01-11T18:35:02.708913 #7654] DEBUG -- : ↳ lib/api/v3/entities.rb:237:in `block in <class:Build>'
D, [2018-01-11T18:35:02.715049 #7654] DEBUG -- : ↳ lib/gitlab/jira/middleware.rb:15:in `call'
D, [2018-01-11T18:35:02.727410 #7654] DEBUG -- : CACHE (0.2ms) SELECT "users".* FROM "users" WHERE "users"."id" = 1336697 LIMIT 1 [["id", 1336697]]
D, [2018-01-11T18:35:02.735988 #7654] DEBUG -- : ↳ lib/gitlab/jira/middleware.rb:15:in `call'
D, [2018-01-11T18:35:02.760610 #7654] DEBUG -- : Ci::Pipeline Load (1.1ms) SELECT "ci_pipelines".* FROM "ci_pipelines" WHERE "ci_pipelines"."id" = 9433169 LIMIT 1 [["id", 9433169]]
D, [2018-01-11T18:35:02.764388 #7654] DEBUG -- : ↳ app/models/commit_status.rb:13:in `commit'
D, [2018-01-11T18:35:02.769565 #7654] DEBUG -- : ↳ lib/gitlab/jira/middleware.rb:15:in `call'
D, [2018-01-11T18:35:02.779445 #7654] DEBUG -- : CACHE (0.2ms) SELECT "projects".* FROM "projects" WHERE "projects"."id" = 3329064 LIMIT 1 [["id", 3329064]]
D, [2018-01-11T18:35:02.787906 #7654] DEBUG -- : ↳ app/models/ci/pipeline.rb:308:in `commit'
D, [2018-01-11T18:35:02.788120 #7654] DEBUG -- : ↳ app/models/commit_status.rb:13:in `commit'
D, [2018-01-11T18:35:02.788388 #7654] DEBUG -- : ↳ lib/gitlab/jira/middleware.rb:15:in `call'
D, [2018-01-11T18:35:02.846629 #7654] DEBUG -- : CACHE (0.2ms) SELECT "ci_runners".* FROM "ci_runners" WHERE "ci_runners"."id" = 169459 LIMIT 1 [["id", 169459]]
D, [2018-01-11T18:35:02.855678 #7654] DEBUG -- : ↳ lib/gitlab/jira/middleware.rb:15:in `call'
Performance seems to have ticked up since the deploy of 10.4 RC2: https://performance.gitlab.net/dashboard/db/grape-endpoints?orgId=1&from=1515430807893&to=1515712406617&panelId=3&fullscreen&var-action=Grape%23GET%20%2Fapi%2Fprojects%2F:id%2Fbuilds&var-database=Production
Edited by Stan Hu