Skip to content

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.

screenshot-andrewn-2022-07-14T14h49Z_2x

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á