Simplify projects, merge requests search queries
What does this MR do?
Simplify projects, merge requests search queries to improve performance (or worsen in some cases, please check the benchmark below) by removing unnecessary/duplicates conditions.
Example: As an admin and I search for gitlab
.
That's the generated count project query (explain
):
SELECT COUNT(*)
FROM "projects"
WHERE "projects"."pending_delete" = 'f'
AND (projects.id IN
(SELECT "projects"."id"
FROM "projects"
INNER JOIN "project_authorizations" ON "projects"."id" = "project_authorizations"."project_id"
WHERE "projects"."pending_delete" = 'f'
AND "project_authorizations"."user_id" = 1
UNION SELECT "projects"."id"
FROM "projects"))
AND (projects.id IN
(SELECT "projects"."id"
FROM "projects"
WHERE "projects"."pending_delete" = 'f'
AND (projects.id IN
(SELECT "projects"."id"
FROM "projects"
INNER JOIN "project_authorizations" ON "projects"."id" = "project_authorizations"."project_id"
WHERE "projects"."pending_delete" = 'f'
AND "project_authorizations"."user_id" = 1
UNION SELECT "projects"."id"
FROM "projects"))
AND (("projects"."path" ILIKE '%%%{query}%%'
OR "projects"."name" ILIKE '%%%{query}%%')
OR "projects"."description" ILIKE '%%%{query}%%')
UNION SELECT "projects"."id"
FROM "projects"
INNER JOIN "namespaces" ON "namespaces"."id" = "projects"."namespace_id"
AND "namespaces"."deleted_at" IS NULL
WHERE "projects"."pending_delete" = 'f'
AND (projects.id IN
(SELECT "projects"."id"
FROM "projects"
INNER JOIN "project_authorizations" ON "projects"."id" = "project_authorizations"."project_id"
WHERE "projects"."pending_delete" = 'f'
AND "project_authorizations"."user_id" = 1
UNION SELECT "projects"."id"
FROM "projects"))
AND ("namespaces"."name" ILIKE '%%%{query}%%')))
Which have the inner join with authorizations
and pending_delete
check repeated multiple times between AND
operator:
INNER JOIN "project_authorizations" ON "projects"."id" = "project_authorizations"."project_id"
WHERE "projects"."pending_delete" = 'f'
AND "project_authorizations"."user_id" = 1
UNION SELECT "projects"."id"
FROM "projects"
By removing the duplicate checks we end up with this query (explain
):
SELECT COUNT(*)
FROM "projects"
WHERE "projects"."pending_delete" = 'f'
AND (projects.id IN
(SELECT "projects"."id"
FROM "projects"
INNER JOIN "project_authorizations" ON "projects"."id" = "project_authorizations"."project_id"
WHERE "projects"."pending_delete" = 'f'
AND "project_authorizations"."user_id" = 1
UNION SELECT "projects"."id"
FROM "projects"))
AND (projects.id IN
(SELECT "projects"."id"
FROM "projects"
WHERE (("projects"."path" ILIKE '%%%{query}%%'
OR "projects"."name" ILIKE '%%%{query}%%')
OR "projects"."description" ILIKE '%%%{query}%%')
UNION SELECT "projects"."id"
FROM "projects"
INNER JOIN "namespaces" ON "namespaces"."id" = "projects"."namespace_id"
AND "namespaces"."deleted_at" IS NULL
WHERE ("namespaces"."name" ILIKE '%%%{query}%%')))
The same apply for the generated merge request count query (explain
):
SELECT COUNT(*)
FROM "merge_requests"
INNER JOIN "projects" ON "projects"."id" = "merge_requests"."target_project_id"
AND "projects"."pending_delete" = 'f'
LEFT JOIN project_features ON projects.id = project_features.project_id
WHERE "merge_requests"."deleted_at" IS NULL
AND "projects"."pending_delete" = 'f'
AND (projects.id IN
(SELECT "projects"."id"
FROM "projects"
INNER JOIN "project_authorizations" ON "projects"."id" = "project_authorizations"."project_id"
WHERE "projects"."pending_delete" = 'f'
AND "project_authorizations"."user_id" = 1
AND "projects"."id" IN
(SELECT "merge_requests"."target_project_id"
FROM "merge_requests"
WHERE "merge_requests"."deleted_at" IS NULL)
UNION SELECT "projects"."id"
FROM "projects"
WHERE "projects"."id" IN
(SELECT "merge_requests"."target_project_id"
FROM "merge_requests"
WHERE "merge_requests"."deleted_at" IS NULL)))
AND ("project_features"."merge_requests_access_level" IN (10,
20)
OR "project_features"."merge_requests_access_level" IS NULL)
AND (merge_requests.id IN
(SELECT "merge_requests"."id"
FROM "merge_requests"
INNER JOIN "projects" ON "projects"."id" = "merge_requests"."target_project_id"
AND "projects"."pending_delete" = 'f'
LEFT JOIN project_features ON projects.id = project_features.project_id
WHERE "merge_requests"."deleted_at" IS NULL
AND "projects"."pending_delete" = 'f'
AND (projects.id IN
(SELECT "projects"."id"
FROM "projects"
INNER JOIN "project_authorizations" ON "projects"."id" = "project_authorizations"."project_id"
WHERE "projects"."pending_delete" = 'f'
AND "project_authorizations"."user_id" = 1
AND "projects"."id" IN
(SELECT "merge_requests"."target_project_id"
FROM "merge_requests"
WHERE "merge_requests"."deleted_at" IS NULL)
UNION SELECT "projects"."id"
FROM "projects"
WHERE "projects"."id" IN
(SELECT "merge_requests"."target_project_id"
FROM "merge_requests"
WHERE "merge_requests"."deleted_at" IS NULL)))
AND ("project_features"."merge_requests_access_level" IN (10,
20)
OR "project_features"."merge_requests_access_level" IS NULL)
AND "merge_requests"."source_project_id" IN
(SELECT "projects"."id"
FROM "projects"
WHERE "projects"."pending_delete" = 'f'
AND (projects.id IN
(SELECT "projects"."id"
FROM "projects"
INNER JOIN "project_authorizations" ON "projects"."id" = "project_authorizations"."project_id"
WHERE "projects"."pending_delete" = 'f'
AND "project_authorizations"."user_id" = 1
UNION SELECT "projects"."id"
FROM "projects")))
UNION SELECT "merge_requests"."id"
FROM "merge_requests"
INNER JOIN "projects" ON "projects"."id" = "merge_requests"."target_project_id"
AND "projects"."pending_delete" = 'f'
LEFT JOIN project_features ON projects.id = project_features.project_id
WHERE "merge_requests"."deleted_at" IS NULL
AND "projects"."pending_delete" = 'f'
AND (projects.id IN
(SELECT "projects"."id"
FROM "projects"
INNER JOIN "project_authorizations" ON "projects"."id" = "project_authorizations"."project_id"
WHERE "projects"."pending_delete" = 'f'
AND "project_authorizations"."user_id" = 1
AND "projects"."id" IN
(SELECT "merge_requests"."target_project_id"
FROM "merge_requests"
WHERE "merge_requests"."deleted_at" IS NULL)
UNION SELECT "projects"."id"
FROM "projects"
WHERE "projects"."id" IN
(SELECT "merge_requests"."target_project_id"
FROM "merge_requests"
WHERE "merge_requests"."deleted_at" IS NULL)))
AND ("project_features"."merge_requests_access_level" IN (10,
20)
OR "project_features"."merge_requests_access_level" IS NULL)
AND "merge_requests"."target_project_id" IN
(SELECT "projects"."id"
FROM "projects"
WHERE "projects"."pending_delete" = 'f'
AND (projects.id IN
(SELECT "projects"."id"
FROM "projects"
INNER JOIN "project_authorizations" ON "projects"."id" = "project_authorizations"."project_id"
WHERE "projects"."pending_delete" = 'f'
AND "project_authorizations"."user_id" = 1
UNION SELECT "projects"."id"
FROM "projects")))))
AND ("merge_requests"."title" ILIKE '%%%{query}%%'
OR "merge_requests"."description" ILIKE '%%%{query}%%')
Repeated check:
INNER JOIN "projects" ON "projects"."id" = "merge_requests"."target_project_id"
AND "projects"."pending_delete" = 'f'
LEFT JOIN project_features ON projects.id = project_features.project_id
WHERE "merge_requests"."deleted_at" IS NULL
AND "projects"."pending_delete" = 'f'
AND (projects.id IN
(SELECT "projects"."id"
FROM "projects"
INNER JOIN "project_authorizations" ON "projects"."id" = "project_authorizations"."project_id"
WHERE "projects"."pending_delete" = 'f'
AND "project_authorizations"."user_id" = 1
AND "projects"."id" IN
(SELECT "merge_requests"."target_project_id"
FROM "merge_requests"
WHERE "merge_requests"."deleted_at" IS NULL)
UNION SELECT "projects"."id"
FROM "projects"
WHERE "projects"."id" IN
(SELECT "merge_requests"."target_project_id"
FROM "merge_requests"
WHERE "merge_requests"."deleted_at" IS NULL)))
AND ("project_features"."merge_requests_access_level" IN (10,
20)
OR "project_features"."merge_requests_access_level" IS NULL)
Updated query (explain
):
SELECT COUNT(*)
FROM "merge_requests"
INNER JOIN "projects" ON "projects"."id" = "merge_requests"."target_project_id"
AND "projects"."pending_delete" = 'f'
LEFT JOIN project_features ON projects.id = project_features.project_id
WHERE "merge_requests"."deleted_at" IS NULL
AND "projects"."pending_delete" = 'f'
AND (projects.id IN
(SELECT "projects"."id"
FROM "projects"
INNER JOIN "project_authorizations" ON "projects"."id" = "project_authorizations"."project_id"
WHERE "projects"."pending_delete" = 'f'
AND "project_authorizations"."user_id" = 1
AND "projects"."id" IN
(SELECT "merge_requests"."target_project_id"
FROM "merge_requests"
WHERE "merge_requests"."deleted_at" IS NULL)
UNION SELECT "projects"."id"
FROM "projects"
WHERE "projects"."id" IN
(SELECT "merge_requests"."target_project_id"
FROM "merge_requests"
WHERE "merge_requests"."deleted_at" IS NULL)))
AND ("project_features"."merge_requests_access_level" IN (10,
20)
OR "project_features"."merge_requests_access_level" IS NULL)
AND (merge_requests.id IN
(SELECT "merge_requests"."id"
FROM "merge_requests"
WHERE "merge_requests"."source_project_id" IN
(SELECT "projects"."id"
FROM "projects"
WHERE "projects"."pending_delete" = 'f'
AND (projects.id IN
(SELECT "projects"."id"
FROM "projects"
INNER JOIN "project_authorizations" ON "projects"."id" = "project_authorizations"."project_id"
WHERE "projects"."pending_delete" = 'f'
AND "project_authorizations"."user_id" = 1
UNION SELECT "projects"."id"
FROM "projects")))
UNION SELECT "merge_requests"."id"
FROM "merge_requests"
WHERE "merge_requests"."target_project_id" IN
(SELECT "projects"."id"
FROM "projects"
WHERE "projects"."pending_delete" = 'f'
AND (projects.id IN
(SELECT "projects"."id"
FROM "projects"
INNER JOIN "project_authorizations" ON "projects"."id" = "project_authorizations"."project_id"
WHERE "projects"."pending_delete" = 'f'
AND "project_authorizations"."user_id" = 1
UNION SELECT "projects"."id"
FROM "projects")))))
AND ("merge_requests"."title" ILIKE '%%%{query}%%'
OR "merge_requests"."description" ILIKE '%%%{query}%%')
Measuring queries execution time
I've measured the time taken to execute the count for these scenarios: user is admin
, normal
, anonymous
between the original and the updated queries, for different search inputs (based on the generated seed data), using this script.
$ rails runner /tmp/bench.rb
user system total real
anonymouse - projects count - all - original 0.000000 0.000000 0.000000 ( 7.935031)
anonymouse - projects count - all - updated 0.010000 0.000000 0.010000 ( 8.705326)
user system total real
anonymouse - projects count - projects - original 0.000000 0.000000 0.000000 ( 7.947350)
anonymouse - projects count - projects - updated 0.000000 0.010000 0.010000 ( 8.815746)
user system total real
anonymouse - projects count - mrs - original 0.000000 0.000000 0.000000 ( 3.194203)
anonymouse - projects count - mrs - updated 0.000000 0.000000 0.000000 ( 3.523315)
user system total real
anonymouse - projects count - partial - original 0.000000 0.000000 0.000000 ( 0.003624)
anonymouse - projects count - partial - updated 0.000000 0.000000 0.000000 ( 0.003340)
user system total real
normal_user - projects count - nan - original 0.000000 0.000000 0.000000 ( 9.032061)
normal_user - projects count - nan - updated 0.000000 0.000000 0.000000 ( 0.005990)
user system total real
normal_user - projects count - all - original 0.000000 0.000000 0.000000 ( 22.455214)
normal_user - projects count - all - updated 0.000000 0.000000 0.000000 ( 14.136155)
user system total real
normal_user - projects count - projects - original 0.000000 0.000000 0.000000 ( 22.678957)
normal_user - projects count - projects - updated 0.000000 0.000000 0.000000 ( 14.282730)
user system total real
normal_user - projects count - mrs - original 0.000000 0.000000 0.000000 ( 9.938968)
normal_user - projects count - mrs - updated 0.000000 0.000000 0.000000 ( 3.451191)
user system total real
normal_user - projects count - partial - original 0.000000 0.000000 0.000000 ( 10.382427)
normal_user - projects count - partial - updated 0.000000 0.000000 0.000000 ( 4.448506)
user system total real
admin - projects count - nan - original 0.000000 0.000000 0.000000 ( 9.140858)
admin - projects count - nan - updated 0.000000 0.000000 0.000000 ( 0.005978)
user system total real
admin - projects count - all - original 0.000000 0.000000 0.000000 ( 24.643975)
admin - projects count - all - updated 0.000000 0.000000 0.000000 ( 14.928272)
user system total real
admin - projects count - projects - original 0.000000 0.000000 0.000000 ( 24.744944)
admin - projects count - projects - updated 0.000000 0.000000 0.000000 ( 15.155386)
user system total real
admin - projects count - mrs - original 0.000000 0.000000 0.000000 ( 9.858695)
admin - projects count - mrs - updated 0.000000 0.000000 0.000000 ( 3.437140)
user system total real
admin - projects count - partial - original 0.000000 0.000000 0.000000 ( 10.679047)
admin - projects count - partial - updated 0.000000 0.000000 0.000000 ( 3.037710)
user system total real
anonymouse - mrs count - nan - original 0.000000 0.000000 0.000000 ( 0.005399)
anonymouse - mrs count - nan - updated 0.000000 0.000000 0.000000 ( 3.568246)
user system total real
anonymouse - mrs count - all - original 0.000000 0.000000 0.000000 ( 11.683208)
anonymouse - mrs count - all - updated 0.000000 0.000000 0.000000 ( 8.835920)
user system total real
anonymouse - mrs count - projects - original 0.000000 0.000000 0.000000 ( 0.003712)
anonymouse - mrs count - projects - updated 0.000000 0.000000 0.000000 ( 3.584386)
user system total real
anonymouse - mrs count - mrs - original 0.000000 0.000000 0.000000 ( 11.888238)
anonymouse - mrs count - mrs - updated 0.000000 0.000000 0.000000 ( 8.726474)
user system total real
anonymouse - mrs count - partial - original 0.000000 0.000000 0.000000 ( 0.005648)
anonymouse - mrs count - partial - updated 0.000000 0.000000 0.000000 ( 3.545526)
user system total real
normal_user - mrs count - nan - original 0.000000 0.000000 0.000000 ( 45.966391)
normal_user - mrs count - nan - updated 0.000000 0.000000 0.000000 ( 21.198180)
user system total real
normal_user - mrs count - all - original 0.000000 0.000000 0.000000 ( 48.620634)
normal_user - mrs count - all - updated 0.000000 0.000000 0.000000 ( 23.351577)
user system total real
normal_user - mrs count - projects - original 0.000000 0.000000 0.000000 ( 45.930244)
normal_user - mrs count - projects - updated 0.000000 0.000000 0.000000 ( 21.660498)
user system total real
normal_user - mrs count - mrs - original 0.000000 0.000000 0.000000 ( 51.005810)
normal_user - mrs count - mrs - updated 0.000000 0.000000 0.000000 ( 26.630592)
user system total real
normal_user - mrs count - partial - original 0.000000 0.000000 0.000000 ( 49.360946)
normal_user - mrs count - partial - updated 0.000000 0.000000 0.000000 ( 24.454520)
user system total real
admin - mrs count - nan - original 0.000000 0.000000 0.000000 ( 32.056543)
admin - mrs count - nan - updated 0.000000 0.000000 0.000000 ( 19.735311)
user system total real
admin - mrs count - all - original 0.000000 0.000000 0.000000 ( 38.085343)
admin - mrs count - all - updated 0.000000 0.000000 0.000000 ( 26.390205)
user system total real
admin - mrs count - projects - original 0.000000 0.000000 0.000000 ( 30.831322)
admin - mrs count - projects - updated 0.000000 0.000000 0.000000 ( 19.820861)
user system total real
admin - mrs count - mrs - original 0.000000 0.000000 0.000000 ( 39.897301)
admin - mrs count - mrs - updated 0.000000 0.000000 0.000000 ( 26.183525)
user system total real
admin - mrs count - partial - original 0.000000 0.000000 0.000000 ( 32.068286)
admin - mrs count - partial - updated 0.000000 0.000000 0.000000 ( 20.092063)
Seed data
The seed data was generated using @jamedjo's https://gitlab.com/gitlab-org/gitlab-ce/snippets/33946 ( some were executed more than once with different text
):
Project.insert_using_generate_series(1, 1500000) do |sql|
project_name = raw("'seed_project_' || seq")
sql.name = project_name
sql.path = project_name
sql.creator_id = author.id
sql.namespace_id = author.namespace_id
# sql.visibility_level = 20
end
Issue.insert_using_generate_series(1, 1500000) do |sql|
text = raw("'seed_issue2_' || seq")
sql.title = text
sql.description = text
sql.author_id = author.id
sql.project_id = raw("seq")
end
MergeRequest.insert_using_generate_series(1, 1500000) do |sql|
target = raw("'seed_mr_target' || seq")
source = raw("'seed_mr_source' || seq")
sql.target_branch = target
sql.source_branch = source
sql.title = target
sql.author_id = author.id
sql.target_project_id = raw("seq")
sql.source_project_id = raw("seq")
end
Milestone.insert_using_generate_series(1, 1500000) do |sql|
sql.title = raw("'seed_ms' || seq")
sql.project_id = raw("seq")
end
Going by the report, the only queries which are faster in the original version are:
user system total real
anonymouse - projects count - all - original 0.000000 0.000000 0.000000 ( 7.935031)
anonymouse - projects count - all - updated 0.010000 0.000000 0.010000 ( 8.705326)
user system total real
anonymouse - projects count - projects - original 0.000000 0.000000 0.000000 ( 7.947350)
anonymouse - projects count - projects - updated 0.000000 0.010000 0.010000 ( 8.815746)
user system total real
anonymouse - projects count - mrs - original 0.000000 0.000000 0.000000 ( 3.194203)
anonymouse - projects count - mrs - updated 0.000000 0.000000 0.000000 ( 3.523315)
anonymouse - mrs count - nan - original 0.000000 0.000000 0.000000 ( 0.005399)
anonymouse - mrs count - nan - updated 0.000000 0.000000 0.000000 ( 3.568246)
user system total real
anonymouse - mrs count - all - original 0.000000 0.000000 0.000000 ( 11.683208)
anonymouse - mrs count - all - updated 0.000000 0.000000 0.000000 ( 8.835920)
user system total real
anonymouse - mrs count - projects - original 0.000000 0.000000 0.000000 ( 0.003712)
anonymouse - mrs count - projects - updated 0.000000 0.000000 0.000000 ( 3.584386)
user system total real
anonymouse - mrs count - partial - original 0.000000 0.000000 0.000000 ( 0.005648)
anonymouse - mrs count - partial - updated 0.000000 0.000000 0.000000 ( 3.545526)
I'll investigate the reason, but I think it's because of early return in the original queries ( maybe the seeded data also affect the result ).
Update
Look like the reason for the huge difference between the updated version and the original in the cases bellow was because I didn't populate project_feature
- each newly created project have a row in this table http://gitlab.com/0xbsec/gitlab-ce/blob/22145-slow-search/app/models/project.rb#L46 -
anonymouse - mrs count - nan - original 0.000000 0.000000 0.000000 ( 0.005399)
anonymouse - mrs count - nan - updated 0.000000 0.000000 0.000000 ( 3.568246)
anonymouse - mrs count - projects - original 0.000000 0.000000 0.000000 ( 0.003712)
anonymouse - mrs count - projects - updated 0.000000 0.000000 0.000000 ( 3.584386)
anonymouse - mrs count - partial - original 0.000000 0.000000 0.000000 ( 0.005648)
anonymouse - mrs count - partial - updated 0.000000 0.000000 0.000000 ( 3.545526)
I've used this query to populate project_feature
:
INSERT INTO
"project_features" ("created_at","updated_at","project_id","merge_requests_access_level","issues_access_level","wiki_access_level","snippets_access_level","builds_access_level","repository_access_level")
SELECT
'2017-03-18 14:15:07.711928',
'2017-03-18 14:15:07.711928',
seq,
20,
20,
20,
20,
20,
20
FROM
GENERATE_SERIES(1, 1000000, 1) AS "seq"
;
The updated report:
user system total real
anonymouse - projects count - nan - original 0.000000 0.000000 0.000000 ( 0.033167)
anonymouse - projects count - nan - updated 0.000000 0.000000 0.000000 ( 0.016830)
user system total real
anonymouse - projects count - all - original 0.010000 0.000000 0.010000 ( 14.901842)
anonymouse - projects count - all - updated 0.000000 0.000000 0.000000 ( 16.013438)
user system total real
anonymouse - projects count - projects - original 0.000000 0.000000 0.000000 ( 9.631885)
anonymouse - projects count - projects - updated 0.000000 0.000000 0.000000 ( 10.695942)
user system total real
anonymouse - projects count - mrs - original 0.000000 0.000000 0.000000 ( 14.553725)
anonymouse - projects count - mrs - updated 0.000000 0.000000 0.000000 ( 9.328919)
user system total real
anonymouse - projects count - partial - original 0.000000 0.000000 0.000000 ( 1.311471)
anonymouse - projects count - partial - updated 0.000000 0.000000 0.000000 ( 0.951538)
user system total real
normal_user - projects count - nan - original 0.000000 0.000000 0.000000 ( 10.049770)
normal_user - projects count - nan - updated 0.000000 0.000000 0.000000 ( 0.015386)
user system total real
normal_user - projects count - all - original 0.000000 0.000000 0.000000 ( 34.930586)
normal_user - projects count - all - updated 0.000000 0.000000 0.000000 ( 28.718161)
user system total real
normal_user - projects count - projects - original 0.000000 0.000000 0.000000 ( 31.115940)
normal_user - projects count - projects - updated 0.000000 0.000000 0.000000 ( 16.147014)
user system total real
normal_user - projects count - mrs - original 0.000000 0.000000 0.000000 ( 20.414610)
normal_user - projects count - mrs - updated 0.000000 0.000000 0.000000 ( 9.569082)
user system total real
normal_user - projects count - partial - original 0.000000 0.000000 0.000000 ( 13.225834)
normal_user - projects count - partial - updated 0.000000 0.000000 0.000000 ( 6.014186)
user system total real
admin - projects count - nan - original 0.000000 0.000000 0.000000 ( 10.517309)
admin - projects count - nan - updated 0.000000 0.000000 0.000000 ( 0.016136)
user system total real
admin - projects count - all - original 0.000000 0.000000 0.000000 ( 32.887341)
admin - projects count - all - updated 0.000000 0.000000 0.000000 ( 21.630579)
user system total real
admin - projects count - projects - original 0.000000 0.000000 0.000000 ( 29.530870)
admin - projects count - projects - updated 0.000000 0.000000 0.000000 ( 14.944984)
user system total real
admin - projects count - mrs - original 0.000000 0.010000 0.010000 ( 18.347696)
admin - projects count - mrs - updated 0.000000 0.000000 0.000000 ( 8.932750)
user system total real
admin - projects count - partial - original 0.000000 0.000000 0.000000 ( 12.646205)
admin - projects count - partial - updated 0.010000 0.000000 0.010000 ( 5.840150)
user system total real
anonymouse - mrs count - nan - original 0.000000 0.000000 0.000000 ( 13.065016)
anonymouse - mrs count - nan - updated 0.000000 0.000000 0.000000 ( 4.905234)
user system total real
anonymouse - mrs count - all - original 0.000000 0.000000 0.000000 ( 16.188468)
anonymouse - mrs count - all - updated 0.000000 0.000000 0.000000 ( 7.366079)
user system total real
anonymouse - mrs count - projects - original 0.000000 0.000000 0.000000 ( 12.515534)
anonymouse - mrs count - projects - updated 0.000000 0.000000 0.000000 ( 3.753850)
user system total real
anonymouse - mrs count - mrs - original 0.000000 0.000000 0.000000 ( 16.489345)
anonymouse - mrs count - mrs - updated 0.000000 0.000000 0.000000 ( 7.155796)
user system total real
anonymouse - mrs count - partial - original 0.000000 0.000000 0.000000 ( 12.479148)
anonymouse - mrs count - partial - updated 0.000000 0.000000 0.000000 ( 3.570247)
user system total real
normal_user - mrs count - nan - original 0.000000 0.000000 0.000000 ( 47.804503)
normal_user - mrs count - nan - updated 0.000000 0.000000 0.000000 ( 22.082809)
user system total real
normal_user - mrs count - all - original 0.000000 0.000000 0.000000 ( 50.181626)
normal_user - mrs count - all - updated 0.000000 0.000000 0.000000 ( 24.127107)
user system total real
normal_user - mrs count - projects - original 0.000000 0.000000 0.000000 ( 47.690195)
normal_user - mrs count - projects - updated 0.000000 0.000000 0.000000 ( 21.830556)
user system total real
normal_user - mrs count - mrs - original 0.000000 0.000000 0.000000 ( 51.376041)
normal_user - mrs count - mrs - updated 0.000000 0.000000 0.000000 ( 26.924873)
user system total real
normal_user - mrs count - partial - original 0.000000 0.000000 0.000000 ( 52.023007)
normal_user - mrs count - partial - updated 0.000000 0.000000 0.000000 ( 23.062595)
user system total real
admin - mrs count - nan - original 0.000000 0.000000 0.000000 ( 32.943281)
admin - mrs count - nan - updated 0.000000 0.000000 0.000000 ( 18.422469)
user system total real
admin - mrs count - all - original 0.000000 0.000000 0.000000 ( 38.943457)
admin - mrs count - all - updated 0.000000 0.000000 0.000000 ( 25.397915)
user system total real
admin - mrs count - projects - original 0.000000 0.000000 0.000000 ( 31.901597)
admin - mrs count - projects - updated 0.000000 0.000000 0.000000 ( 17.496475)
user system total real
admin - mrs count - mrs - original 0.000000 0.000000 0.000000 ( 37.799263)
admin - mrs count - mrs - updated 0.000000 0.000000 0.000000 ( 24.788600)
user system total real
admin - mrs count - partial - original 0.000000 0.000000 0.000000 ( 32.905660)
admin - mrs count - partial - updated 0.000000 0.000000 0.000000 ( 18.467355)
Which look find but for these two cases:
anonymouse - projects count - all - original 0.010000 0.000000 0.010000 ( 14.901842)
anonymouse - projects count - all - updated 0.000000 0.000000 0.000000 ( 16.013438)
anonymouse - projects count - projects - original 0.000000 0.000000 0.000000 ( 9.631885)
anonymouse - projects count - projects - updated 0.000000 0.000000 0.000000 ( 10.695942)
Are there points in the code the reviewer needs to double check?
Does this MR meet the acceptance criteria?
-
Changelog entry added -
Documentation created/updated -
API support added - Tests
-
Added for this feature/bug -
All builds are passing
-
-
Conform by the merge request performance guides -
Conform by the style guides -
Branch has no merge conflicts with master
(if it does - rebase it please) -
Squashed related commits together
What are the relevant issue numbers?
ref #22145 (closed), as I've checked -thanks to @Fleurer's update- the problem in this issue is that foreach search request / page navigation, the count queries for: issues, mrs, projects, milstone get executed.
This mr will not fix it.