Group by Epic on the Issue Board consistently fails with database timeout
When viewing the GitLab Dedicated Engineering Board, and grouping by Epic, the page render fails with a database time.
Digging deeper, the SQL query generated by the GraphQL query is failing with canceling statement due to statement timeout
: log message.
SELECT "epics".* FROM "epics" WHERE "epics"."id" IN (SELECT DISTINCT "epic_issues"."epic_id" FROM "issues" INNER JOIN "projects" ON "projects"."id" = "issues"."project_id" INNER JOIN "epic_issues" ON "epic_issues"."issue_id" = "issues"."id" LEFT JOIN project_features ON projects.id = project_features.project_id WHERE "issues"."author_id" NOT IN (SELECT "banned_users"."user_id" FROM "banned_users") AND (
issues.confidential IS NOT TRUE
OR (issues.confidential = $1
AND (issues.author_id = $2
OR EXISTS (SELECT $3 FROM issue_assignees WHERE user_id = $4 AND issue_id = issues.id)
OR EXISTS (SELECT $5 FROM "project_authorizations" WHERE "project_authorizations"."user_id" = $6 AND (project_authorizations.project_id = issues.project_id) AND (project_authorizations.access_level >= $7))))) AND "projects"."namespace_id" IN (SELECT namespaces.traversal_ids[array_length(namespaces.traversal_ids, $8)] AS id FROM "namespaces" WHERE "namespaces"."type" = $9 AND (traversal_ids @> ($10))) AND (EXISTS (SELECT $11 FROM "project_authorizations" WHERE "project_authorizations"."user_id" = $12 AND (project_authorizations.project_id = projects.id) AND (project_authorizations.access_level >= $13)) OR projects.visibility_level IN ($14,$15)) AND ("project_features"."issues_access_level" IS NULL OR "project_features"."issues_access_level" IN ($16,$17) OR ("project_features"."issues_access_level" = $18 AND EXISTS (SELECT $19 FROM "project_authorizations" WHERE "project_authorizations"."user_id" = $20 AND (project_authorizations.project_id = project_features.project_id) AND (project_authorizations.access_level >= $21)))) AND "projects"."archived" = $22 AND "issues"."issue_type" IN ($23, $24) AND "epic_issues"."epic_id" IN (SELECT "epics"."id" FROM "epics" WHERE "epics"."group_id" IN (SELECT "namespaces"."id" FROM "namespaces" WHERE "namespaces"."type" = $25 AND (traversal_ids @> ($26) OR "namespaces"."id" IN ($27, $28))) AND "epics"."state_id" = $29)) ORDER BY "epics"."id" DESC LIMIT $30
json.sql_state_code
Query plan: https://console.postgres.ai/gitlab/gitlab-production-tunnel-pg12/sessions/11405/commands/40768
cc @o-lluch
Edited by Jarka Košanová