Not ideal query plan is used for loading epics and its descendants on roadmap page
The query used by epic roadmap page - https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/lib/gitlab/graphql/loaders/bulk_epic_aggregate_loader.rb#L26 may use different query plans depending on number of epic ids
- query plan if I ask for 81 epics: https://explain.depesz.com/s/oUMB
- query plan if I ask for 91 epics: https://explain.depesz.com/s/UclV
I wonder if we could convince postgres to always use the first query plan no matter how many epics are picked (currently we ask for 1001 epics on the roadmap page)?
SQL query which is slow:
EXPLAIN WITH RECURSIVE "base_and_descendants" AS (
(
SELECT
"epics".*
FROM
"epics"
WHERE
"epics"."id" IN (77997, 74158, 73492, 112147, 141749, 121866, 121137, 120387, 119419, 115368, 115218, 115206, 100753, 99516, 99191, 93593, 93315, 91701, 91619, 91168, 90629, 86306, 86143, 86142, 86089, 86054, 85863, 85862, 85625, 85321, 85266, 83948, 83697, 81768, 81765, 81683, 81200, 80501, 80405, 80283, 80129, 79944, 78413, 77085, 71915, 71595, 68941, 68939, 68860, 61962, 60608, 59511, 57568, 56284, 55532, 54725, 52335, 47461, 46936, 39679, 38258, 27993, 27184, 26374, 18761, 17742, 17596, 16033, 15762, 14751, 13209, 11939, 11664, 10370, 7882, 6998, 5734, 5643, 941, 502, 59628, 8505, 95814, 91096, 90006, 68280, 10285, 111984, 91552, 90701, 81649, 97672, 91722, 91548, 83491, 82385, 77983, 58232, 57280, 5636, 5602))
UNION (
SELECT
"epics".*
FROM
"epics",
"base_and_descendants"
WHERE
"epics"."parent_id" = "base_and_descendants"."id"))
SELECT
epics.id,
epics.iid,
epics.parent_id,
epics.state_id AS epic_state_id,
issues.state_id AS issues_state_id,
COUNT(issues) AS issues_count,
SUM(COALESCE(issues.weight, 0)) AS issues_weight_sum
FROM
"base_and_descendants" AS "epics"
LEFT OUTER JOIN "epic_issues" ON "epic_issues"."epic_id" = "epics"."id"
LEFT OUTER JOIN "issues" ON "issues"."id" = "epic_issues"."issue_id"
GROUP BY
issues.state_id,
epics.id,
epics.iid,
epics.parent_id,
epics.state_id
LIMIT 100001;
Related to gitlab-com/www-gitlab-com#10005 (comment 512167643)
Edited by Jan Provaznik