Optimize `EnvironmentSerializer` for N+1 Problem in `environments.json` and `folder.json`
Problem
It seems environments.json
has bunch of N+1 issues.
We can see the following repeated database queries, for example:
SELECT 1 AS one FROM ((SELECT "clusters".* FROM "clusters" INNER JOIN "cluster_projects" ON "clusters"."id" = "cluster_projects"."cluster_id" WHERE
SELECT "projects".* FROM "projects" WHERE "projects"."id" = 278964 LIMIT 1
ELECT "namespaces".* FROM "namespaces" WHERE "namespaces"."id" = 9970
In fact, we aren't preloading associations in the code.
Query frequencies
https://gitlab.com/gitlab-org/gitlab/-/environments.json
Total: 216 queries
18 "SELECT \"routes\".* FROM \"routes\" WHERE \"routes\".\"source_id\" = 9970 AND \"routes\".\"source_type\" = 'Namespace' LIMIT 1"
18 "SELECT \"namespaces\".* FROM \"namespaces\" WHERE \"namespaces\".\"id\" = 9970 LIMIT 1"
10 "SELECT \"routes\".* FROM \"routes\" WHERE \"routes\".\"source_id\" = 278964 AND \"routes\".\"source_type\" = 'Project' LIMIT 1"
10 "SELECT \"projects\".* FROM \"projects\" WHERE \"projects\".\"id\" = 278964 LIMIT 1"
9 "SELECT \"users\".* FROM \"users\" WHERE \"users\".\"id\" = 2324599 LIMIT 1"
5 "SELECT \"projects\".* FROM \"projects\" INNER JOIN \"cluster_projects\" ON \"projects\".\"id\" = \"cluster_projects\".\"project_id\" WHERE \"cluster_projects\".\"cluster_id\" = 774 ORDER BY \"projects\".\"id\" ASC LIMIT 1"
5 "SELECT \"clusters\".* FROM \"clusters\" WHERE \"clusters\".\"id\" = 774 LIMIT 1"
5 "SELECT \"clusters_applications_prometheus\".* FROM \"clusters_applications_prometheus\" WHERE \"clusters_applications_prometheus\".\"cluster_id\" = 774 LIMIT 1"
5 "SELECT \"clusters_applications_elastic_stacks\".* FROM \"clusters_applications_elastic_stacks\" WHERE \"clusters_applications_elastic_stacks\".\"cluster_id\" = 774 LIMIT 1"
5 "SELECT \"cluster_platforms_kubernetes\".* FROM \"cluster_platforms_kubernetes\" WHERE \"cluster_platforms_kubernetes\".\"cluster_id\" = 774 LIMIT 1"
3 "SELECT \"deployments\".* FROM \"deployments\" WHERE \"deployments\".\"environment_id\" = 1178942 AND \"deployments\".\"status\" = 2 ORDER BY deployments.id DESC LIMIT 1"
3 "SELECT \"deployments\".* FROM \"deployments\" WHERE \"deployments\".\"environment_id\" = 1176592 AND \"deployments\".\"status\" = 2 ORDER BY deployments.id DESC LIMIT 1"
3 "SELECT \"deployments\".* FROM \"deployments\" WHERE \"deployments\".\"environment_id\" = 1176344 AND \"deployments\".\"status\" = 2 ORDER BY deployments.id DESC LIMIT 1"
3 "SELECT \"ci_builds\".* FROM \"ci_builds\" WHERE \"ci_builds\".\"type\" = 'Ci::Build' AND \"ci_builds\".\"commit_id\" = 282465217 AND (\"ci_builds\".\"retried\" = FALSE OR \"ci_builds\".\"retried\" IS NULL) AND \"ci_builds\".\"when\" = 'manual' AND \"ci_builds\".\"status\" IN ('success', 'failed', 'canceled', 'skipped', 'manual') AND \"ci_builds\".\"name\" != 'review-deploy' AND \"ci_builds\".\"name\" = 'review-stop' LIMIT 1"
2 "SELECT \"protected_branches\".* FROM \"protected_branches\" WHERE \"protected_branches\".\"project_id\" = 278964"
2 "SELECT \"environments\".* FROM \"environments\" WHERE \"environments\".\"id\" = 1178942 LIMIT 1"
2 "SELECT \"environments\".* FROM \"environments\" WHERE \"environments\".\"id\" = 1176592 LIMIT 1"
2 "SELECT \"environments\".* FROM \"environments\" WHERE \"environments\".\"id\" = 1176344 LIMIT 1"
2 "SELECT \"deployments\".* FROM \"deployments\" WHERE \"deployments\".\"environment_id\" = 4897571 AND \"deployments\".\"status\" = 2 ORDER BY deployments.id DESC LIMIT 1"
2 "SELECT \"deployments\".* FROM \"deployments\" WHERE \"deployments\".\"environment_id\" = 1853312 AND \"deployments\".\"status\" = 2 ORDER BY deployments.id DESC LIMIT 1"
2 "SELECT \"deployments\".* FROM \"deployments\" WHERE \"deployments\".\"environment_id\" = 1197349 AND \"deployments\".\"status\" = 2 ORDER BY deployments.id DESC LIMIT 1"
2 "SELECT \"clusters_applications_prometheus\".* FROM \"clusters_applications_prometheus\" WHERE \"clusters_applications_prometheus\".\"cluster_id\" = 108898 LIMIT 1"
2 "SELECT \"clusters_applications_elastic_stacks\".* FROM \"clusters_applications_elastic_stacks\" WHERE \"clusters_applications_elastic_stacks\".\"cluster_id\" = 108898 LIMIT 1"
2 "SELECT \"cluster_platforms_kubernetes\".* FROM \"cluster_platforms_kubernetes\" WHERE \"cluster_platforms_kubernetes\".\"cluster_id\" = 108898 LIMIT 1"
1 "WITH RECURSIVE \"clusters_cte\" AS ((SELECT \"clusters\".*, NULL AS group_parent_id, 0 AS depth FROM \"clusters\" INNER JOIN \"cluster_projects\" ON \"cluster_projects\".\"cluster_id\" = \"clusters\".\"id\" INNER JOIN \"projects\" ON \"projects\".\"id\" = \"cluster_projects\".\"project_id\" WHERE \"clusters\".\"management_project_id\" = 278964 AND \"clusters\".\"cluster_type\" = 3 AND \"projects\".\"namespace_id\" = 9970)\nUNION\n(SELECT \"clusters\".*, \"projects\".\"namespace_id\" AS group_parent_id, 1 AS depth FROM \"projects\" LEFT OUTER JOIN \"cluster_projects\" ON \"cluster_projects\".\"project_id\" = \"projects\".\"id\" LEFT OUTER JOIN \"clusters\" ON \"clusters\".\"id\" = \"cluster_projects\".\"cluster_id\" WHERE \"projects\".\"id\" = 278964)\nUNION\n(SELECT \"clusters\".*, \"namespaces\".\"parent_id\" AS group_parent_id, (\"clusters_cte\".\"depth\" + 1) FROM \"clusters_cte\", \"namespaces\" LEFT OUTER JOIN cluster_groups ON cluster_groups.group_id = namespaces.id LEFT OUTER JOIN clusters ON cluster_groups.cluster_id = clusters.id WHERE \"namespaces\".\"id\" = \"clusters_cte\".\"group_parent_id\")) SELECT \"clusters\".* FROM \"clusters_cte\" \"clusters\" WHERE \"clusters\".\"id\" IS NOT NULL AND \"clusters\".\"enabled\" = TRUE AND (environment_scope IN ('*', 'review/qa-shl-replace-rspec-meta-from-export-file-download-spec') OR\n 'review/qa-shl-replace-rspec-meta-from-export-file-download-spec' LIKE\n REPLACE(REPLACE(REPLACE(environment_scope,\n '%', '\\%'),\n '_', '\\_'),\n '*', '%')\n\n) ORDER BY (CASE clusters.management_project_id\n WHEN 278964 THEN 0\n ELSE depth\nEND) ASC\n, CASE environment_scope\n WHEN '*' THEN 0\n WHEN 'review/qa-shl-replace-rspec-meta-from-export-file-download-spec' THEN 2\n ELSE 1\nEND DESC\n LIMIT 1"
1 "WITH RECURSIVE \"clusters_cte\" AS ((SELECT \"clusters\".*, NULL AS group_parent_id, 0 AS depth FROM \"clusters\" INNER JOIN \"cluster_projects\" ON \"cluster_projects\".\"cluster_id\" = \"clusters\".\"id\" INNER JOIN \"projects\" ON \"projects\".\"id\" = \"cluster_projects\".\"project_id\" WHERE \"clusters\".\"management_project_id\" = 278964 AND \"clusters\".\"cluster_type\" = 3 AND \"projects\".\"namespace_id\" = 9970)\nUNION\n(SELECT \"clusters\".*, \"projects\".\"namespace_id\" AS group_parent_id, 1 AS depth FROM \"projects\" LEFT OUTER JOIN \"cluster_projects\" ON \"cluster_projects\".\"project_id\" = \"projects\".\"id\" LEFT OUTER JOIN \"clusters\" ON \"clusters\".\"id\" = \"cluster_projects\".\"cluster_id\" WHERE \"projects\".\"id\" = 278964)\nUNION\n(SELECT \"clusters\".*, \"namespaces\".\"parent_id\" AS group_parent_id, (\"clusters_cte\".\"depth\" + 1) FROM \"clusters_cte\", \"namespaces\" LEFT OUTER JOIN cluster_groups ON cluster_groups.group_id = namespaces.id LEFT OUTER JOIN clusters ON cluster_groups.cluster_id = clusters.id WHERE \"namespaces\".\"id\" = \"clusters_cte\".\"group_parent_id\")) SELECT \"clusters\".* FROM \"clusters_cte\" \"clusters\" WHERE \"clusters\".\"id\" IS NOT NULL AND \"clusters\".\"enabled\" = TRUE AND (environment_scope IN ('*', 'review-docs/mr-58733') OR\n 'review-docs/mr-58733' LIKE\n REPLACE(REPLACE(REPLACE(environment_scope,\n '%', '\\%'),\n '_', '\\_'),\n '*', '%')\n\n) ORDER BY (CASE clusters.management_project_id\n WHEN 278964 THEN 0\n ELSE depth\nEND) ASC\n, CASE environment_scope\n WHEN '*' THEN 0\n WHEN 'review-docs/mr-58733' THEN 2\n ELSE 1\nEND DESC\n LIMIT 1"
1 "WITH RECURSIVE \"clusters_cte\" AS ((SELECT \"clusters\".*, NULL AS group_parent_id, 0 AS depth FROM \"clusters\" INNER JOIN \"cluster_projects\" ON \"cluster_projects\".\"cluster_id\" = \"clusters\".\"id\" INNER JOIN \"projects\" ON \"projects\".\"id\" = \"cluster_projects\".\"project_id\" WHERE \"clusters\".\"management_project_id\" = 278964 AND \"clusters\".\"cluster_type\" = 3 AND \"projects\".\"namespace_id\" = 9970)\nUNION\n(SELECT \"clusters\".*, \"projects\".\"namespace_id\" AS group_parent_id, 1 AS depth FROM \"projects\" LEFT OUTER JOIN \"cluster_projects\" ON \"cluster_projects\".\"project_id\" = \"projects\".\"id\" LEFT OUTER JOIN \"clusters\" ON \"clusters\".\"id\" = \"cluster_projects\".\"cluster_id\" WHERE \"projects\".\"id\" = 278964)\nUNION\n(SELECT \"clusters\".*, \"namespaces\".\"parent_id\" AS group_parent_id, (\"clusters_cte\".\"depth\" + 1) FROM \"clusters_cte\", \"namespaces\" LEFT OUTER JOIN cluster_groups ON cluster_groups.group_id = namespaces.id LEFT OUTER JOIN clusters ON cluster_groups.cluster_id = clusters.id WHERE \"namespaces\".\"id\" = \"clusters_cte\".\"group_parent_id\")) SELECT \"clusters\".* FROM \"clusters_cte\" \"clusters\" WHERE \"clusters\".\"id\" IS NOT NULL AND \"clusters\".\"enabled\" = TRUE AND (environment_scope IN ('*', 'release') OR\n 'release' LIKE\n REPLACE(REPLACE(REPLACE(environment_scope,\n '%', '\\%'),\n '_', '\\_'),\n '*', '%')\n\n) ORDER BY (CASE clusters.management_project_id\n WHEN 278964 THEN 0\n ELSE depth\nEND) ASC\n, CASE environment_scope\n WHEN '*' THEN 0\n WHEN 'release' THEN 2\n ELSE 1\nEND DESC\n LIMIT 1"
1 "WITH RECURSIVE \"clusters_cte\" AS ((SELECT \"clusters\".*, NULL AS group_parent_id, 0 AS depth FROM \"clusters\" INNER JOIN \"cluster_projects\" ON \"cluster_projects\".\"cluster_id\" = \"clusters\".\"id\" INNER JOIN \"projects\" ON \"projects\".\"id\" = \"cluster_projects\".\"project_id\" WHERE \"clusters\".\"management_project_id\" = 278964 AND \"clusters\".\"cluster_type\" = 3 AND \"projects\".\"namespace_id\" = 9970)\nUNION\n(SELECT \"clusters\".*, \"projects\".\"namespace_id\" AS group_parent_id, 1 AS depth FROM \"projects\" LEFT OUTER JOIN \"cluster_projects\" ON \"cluster_projects\".\"project_id\" = \"projects\".\"id\" LEFT OUTER JOIN \"clusters\" ON \"clusters\".\"id\" = \"cluster_projects\".\"cluster_id\" WHERE \"projects\".\"id\" = 278964)\nUNION\n(SELECT \"clusters\".*, \"namespaces\".\"parent_id\" AS group_parent_id, (\"clusters_cte\".\"depth\" + 1) FROM \"clusters_cte\", \"namespaces\" LEFT OUTER JOIN cluster_groups ON cluster_groups.group_id = namespaces.id LEFT OUTER JOIN clusters ON cluster_groups.cluster_id = clusters.id WHERE \"namespaces\".\"id\" = \"clusters_cte\".\"group_parent_id\")) SELECT \"clusters\".* FROM \"clusters_cte\" \"clusters\" WHERE \"clusters\".\"id\" IS NOT NULL AND \"clusters\".\"enabled\" = TRUE AND (environment_scope IN ('*', 'pre') OR\n 'pre' LIKE\n REPLACE(REPLACE(REPLACE(environment_scope,\n '%', '\\%'),\n '_', '\\_'),\n '*', '%')\n\n) ORDER BY (CASE clusters.management_project_id\n WHEN 278964 THEN 0\n ELSE depth\nEND) ASC\n, CASE environment_scope\n WHEN '*' THEN 0\n WHEN 'pre' THEN 2\n ELSE 1\nEND DESC\n LIMIT 1"
1 "WITH RECURSIVE \"clusters_cte\" AS ((SELECT \"clusters\".*, NULL AS group_parent_id, 0 AS depth FROM \"clusters\" INNER JOIN \"cluster_projects\" ON \"cluster_projects\".\"cluster_id\" = \"clusters\".\"id\" INNER JOIN \"projects\" ON \"projects\".\"id\" = \"cluster_projects\".\"project_id\" WHERE \"clusters\".\"management_project_id\" = 278964 AND \"clusters\".\"cluster_type\" = 3 AND \"projects\".\"namespace_id\" = 9970)\nUNION\n(SELECT \"clusters\".*, \"projects\".\"namespace_id\" AS group_parent_id, 1 AS depth FROM \"projects\" LEFT OUTER JOIN \"cluster_projects\" ON \"cluster_projects\".\"project_id\" = \"projects\".\"id\" LEFT OUTER JOIN \"clusters\" ON \"clusters\".\"id\" = \"cluster_projects\".\"cluster_id\" WHERE \"projects\".\"id\" = 278964)\nUNION\n(SELECT \"clusters\".*, \"namespaces\".\"parent_id\" AS group_parent_id, (\"clusters_cte\".\"depth\" + 1) FROM \"clusters_cte\", \"namespaces\" LEFT OUTER JOIN cluster_groups ON cluster_groups.group_id = namespaces.id LEFT OUTER JOIN clusters ON cluster_groups.cluster_id = clusters.id WHERE \"namespaces\".\"id\" = \"clusters_cte\".\"group_parent_id\")) SELECT \"clusters\".* FROM \"clusters_cte\" \"clusters\" WHERE \"clusters\".\"id\" IS NOT NULL AND \"clusters\".\"enabled\" = TRUE AND (environment_scope IN ('*', 'gstg') OR\n 'gstg' LIKE\n REPLACE(REPLACE(REPLACE(environment_scope,\n '%', '\\%'),\n '_', '\\_'),\n '*', '%')\n\n) ORDER BY (CASE clusters.management_project_id\n WHEN 278964 THEN 0\n ELSE depth\nEND) ASC\n, CASE environment_scope\n WHEN '*' THEN 0\n WHEN 'gstg' THEN 2\n ELSE 1\nEND DESC\n LIMIT 1"
1 "WITH RECURSIVE \"clusters_cte\" AS ((SELECT \"clusters\".*, NULL AS group_parent_id, 0 AS depth FROM \"clusters\" INNER JOIN \"cluster_projects\" ON \"cluster_projects\".\"cluster_id\" = \"clusters\".\"id\" INNER JOIN \"projects\" ON \"projects\".\"id\" = \"cluster_projects\".\"project_id\" WHERE \"clusters\".\"management_project_id\" = 278964 AND \"clusters\".\"cluster_type\" = 3 AND \"projects\".\"namespace_id\" = 9970)\nUNION\n(SELECT \"clusters\".*, \"projects\".\"namespace_id\" AS group_parent_id, 1 AS depth FROM \"projects\" LEFT OUTER JOIN \"cluster_projects\" ON \"cluster_projects\".\"project_id\" = \"projects\".\"id\" LEFT OUTER JOIN \"clusters\" ON \"clusters\".\"id\" = \"cluster_projects\".\"cluster_id\" WHERE \"projects\".\"id\" = 278964)\nUNION\n(SELECT \"clusters\".*, \"namespaces\".\"parent_id\" AS group_parent_id, (\"clusters_cte\".\"depth\" + 1) FROM \"clusters_cte\", \"namespaces\" LEFT OUTER JOIN cluster_groups ON cluster_groups.group_id = namespaces.id LEFT OUTER JOIN clusters ON cluster_groups.cluster_id = clusters.id WHERE \"namespaces\".\"id\" = \"clusters_cte\".\"group_parent_id\")) SELECT \"clusters\".* FROM \"clusters_cte\" \"clusters\" WHERE \"clusters\".\"id\" IS NOT NULL AND \"clusters\".\"enabled\" = TRUE AND (environment_scope IN ('*', 'gprd') OR\n 'gprd' LIKE\n REPLACE(REPLACE(REPLACE(environment_scope,\n '%', '\\%'),\n '_', '\\_'),\n '*', '%')\n\n) ORDER BY (CASE clusters.management_project_id\n WHEN 278964 THEN 0\n ELSE depth\nEND) ASC\n, CASE environment_scope\n WHEN '*' THEN 0\n WHEN 'gprd' THEN 2\n ELSE 1\nEND DESC\n LIMIT 1"
1 "WITH RECURSIVE \"clusters_cte\" AS ((SELECT \"clusters\".*, NULL AS group_parent_id, 0 AS depth FROM \"clusters\" INNER JOIN \"cluster_projects\" ON \"cluster_projects\".\"cluster_id\" = \"clusters\".\"id\" INNER JOIN \"projects\" ON \"projects\".\"id\" = \"cluster_projects\".\"project_id\" WHERE \"clusters\".\"management_project_id\" = 278964 AND \"clusters\".\"cluster_type\" = 3 AND \"projects\".\"namespace_id\" = 9970)\nUNION\n(SELECT \"clusters\".*, \"projects\".\"namespace_id\" AS group_parent_id, 1 AS depth FROM \"projects\" LEFT OUTER JOIN \"cluster_projects\" ON \"cluster_projects\".\"project_id\" = \"projects\".\"id\" LEFT OUTER JOIN \"clusters\" ON \"clusters\".\"id\" = \"cluster_projects\".\"cluster_id\" WHERE \"projects\".\"id\" = 278964)\nUNION\n(SELECT \"clusters\".*, \"namespaces\".\"parent_id\" AS group_parent_id, (\"clusters_cte\".\"depth\" + 1) FROM \"clusters_cte\", \"namespaces\" LEFT OUTER JOIN cluster_groups ON cluster_groups.group_id = namespaces.id LEFT OUTER JOIN clusters ON cluster_groups.cluster_id = clusters.id WHERE \"namespaces\".\"id\" = \"clusters_cte\".\"group_parent_id\")) SELECT \"clusters\".* FROM \"clusters_cte\" \"clusters\" WHERE \"clusters\".\"id\" IS NOT NULL AND \"clusters\".\"enabled\" = TRUE AND (environment_scope IN ('*', 'gprd-cny') OR\n 'gprd-cny' LIKE\n REPLACE(REPLACE(REPLACE(environment_scope,\n '%', '\\%'),\n '_', '\\_'),\n '*', '%')\n\n) ORDER BY (CASE clusters.management_project_id\n WHEN 278964 THEN 0\n ELSE depth\nEND) ASC\n, CASE environment_scope\n WHEN '*' THEN 0\n WHEN 'gprd-cny' THEN 2\n ELSE 1\nEND DESC\n LIMIT 1"
1 "SELECT \"users\".* FROM \"users\" WHERE \"users\".\"id\" = 2632430 LIMIT 1"
1 "SELECT \"users\".* FROM \"users\" WHERE \"users\".\"id\" = 1786152 LIMIT 1"
1 "SELECT \"users\".* FROM ((SELECT \"users\".* FROM \"users\" WHERE (LOWER(\"users\".\"email\") IN (LOWER('sliaquat@gitlab.com'))) AND \"users\".\"confirmed_at\" IS NOT NULL)\nUNION\n(SELECT \"users\".* FROM \"users\" INNER JOIN \"emails\" ON \"emails\".\"user_id\" = \"users\".\"id\" WHERE \"emails\".\"email\" = 'sliaquat@gitlab.com' AND \"users\".\"confirmed_at\" IS NOT NULL AND \"emails\".\"confirmed_at\" IS NOT NULL)) users"
1 "SELECT \"users\".* FROM ((SELECT \"users\".* FROM \"users\" WHERE (LOWER(\"users\".\"email\") IN (LOWER('rspeicher@gmail.com'))) AND \"users\".\"confirmed_at\" IS NOT NULL)\nUNION\n(SELECT \"users\".* FROM \"users\" INNER JOIN \"emails\" ON \"emails\".\"user_id\" = \"users\".\"id\" WHERE \"emails\".\"email\" = 'rspeicher@gmail.com' AND \"users\".\"confirmed_at\" IS NOT NULL AND \"emails\".\"confirmed_at\" IS NOT NULL)) users"
1 "SELECT \"users\".* FROM ((SELECT \"users\".* FROM \"users\" WHERE (LOWER(\"users\".\"email\") IN (LOWER('mlapierre@gitlab.com'))) AND \"users\".\"confirmed_at\" IS NOT NULL)\nUNION\n(SELECT \"users\".* FROM \"users\" INNER JOIN \"emails\" ON \"emails\".\"user_id\" = \"users\".\"id\" WHERE \"emails\".\"email\" = 'mlapierre@gitlab.com' AND \"users\".\"confirmed_at\" IS NOT NULL AND \"emails\".\"confirmed_at\" IS NOT NULL)) users"
1 "SELECT \"users\".* FROM ((SELECT \"users\".* FROM \"users\" WHERE (LOWER(\"users\".\"email\") IN (LOWER('jvargas@gitlab.com'))) AND \"users\".\"confirmed_at\" IS NOT NULL)\nUNION\n(SELECT \"users\".* FROM \"users\" INNER JOIN \"emails\" ON \"emails\".\"user_id\" = \"users\".\"id\" WHERE \"emails\".\"email\" = 'jvargas@gitlab.com' AND \"users\".\"confirmed_at\" IS NOT NULL AND \"emails\".\"confirmed_at\" IS NOT NULL)) users"
1 "SELECT \"users\".* FROM ((SELECT \"users\".* FROM \"users\" WHERE (LOWER(\"users\".\"email\") IN (LOWER('jen-shin@gitlab.com'))) AND \"users\".\"confirmed_at\" IS NOT NULL)\nUNION\n(SELECT \"users\".* FROM \"users\" INNER JOIN \"emails\" ON \"emails\".\"user_id\" = \"users\".\"id\" WHERE \"emails\".\"email\" = 'jen-shin@gitlab.com' AND \"users\".\"confirmed_at\" IS NOT NULL AND \"emails\".\"confirmed_at\" IS NOT NULL)) users"
1 "SELECT \"users\".* FROM ((SELECT \"users\".* FROM \"users\" WHERE (LOWER(\"users\".\"email\") IN (LOWER('gitlab-bot@gitlab.com'))) AND \"users\".\"confirmed_at\" IS NOT NULL)\nUNION\n(SELECT \"users\".* FROM \"users\" INNER JOIN \"emails\" ON \"emails\".\"user_id\" = \"users\".\"id\" WHERE \"emails\".\"email\" = 'gitlab-bot@gitlab.com' AND \"users\".\"confirmed_at\" IS NOT NULL AND \"emails\".\"confirmed_at\" IS NOT NULL)) users"
1 "SELECT \"users\".* FROM ((SELECT \"users\".* FROM \"users\" WHERE (LOWER(\"users\".\"email\") IN (LOWER('eread@gitlab.com'))) AND \"users\".\"confirmed_at\" IS NOT NULL)\nUNION\n(SELECT \"users\".* FROM \"users\" INNER JOIN \"emails\" ON \"emails\".\"user_id\" = \"users\".\"id\" WHERE \"emails\".\"email\" = 'eread@gitlab.com' AND \"users\".\"confirmed_at\" IS NOT NULL AND \"emails\".\"confirmed_at\" IS NOT NULL)) users"
1 "SELECT \"users\".* FROM ((SELECT \"users\".* FROM \"users\" WHERE (LOWER(\"users\".\"email\") IN (LOWER('dyl.griffith@gmail.com'))) AND \"users\".\"confirmed_at\" IS NOT NULL)\nUNION\n(SELECT \"users\".* FROM \"users\" INNER JOIN \"emails\" ON \"emails\".\"user_id\" = \"users\".\"id\" WHERE \"emails\".\"email\" = 'dyl.griffith@gmail.com' AND \"users\".\"confirmed_at\" IS NOT NULL AND \"emails\".\"confirmed_at\" IS NOT NULL)) users"
1 "SELECT \"uploads\".* FROM \"uploads\" WHERE \"uploads\".\"uploader\" = 'AvatarUploader' AND \"uploads\".\"path\" IN ('uploads/-/system/user/avatar/758045/avatar.png', 'user/avatar/758045/avatar.png', 'uploads/-/system/user/avatar/2324599/avatar.png', 'user/avatar/2324599/avatar.png') ORDER BY \"uploads\".\"id\" ASC LIMIT 1000"
1 "SELECT \"uploads\".* FROM \"uploads\" WHERE \"uploads\".\"uploader\" = 'AvatarUploader' AND \"uploads\".\"path\" IN ('uploads/-/system/user/avatar/2632430/avatar.png', 'user/avatar/2632430/avatar.png') ORDER BY \"uploads\".\"id\" ASC LIMIT 1000"
1 "SELECT \"uploads\".* FROM \"uploads\" WHERE \"uploads\".\"uploader\" = 'AvatarUploader' AND \"uploads\".\"path\" IN ('uploads/-/system/user/avatar/2324599/avatar.png', 'user/avatar/2324599/avatar.png', 'uploads/-/system/user/avatar/655908/avatar.png', 'user/avatar/655908/avatar.png') ORDER BY \"uploads\".\"id\" ASC LIMIT 1000"
1 "SELECT \"uploads\".* FROM \"uploads\" WHERE \"uploads\".\"uploader\" = 'AvatarUploader' AND \"uploads\".\"path\" IN ('uploads/-/system/user/avatar/2324599/avatar.png', 'user/avatar/2324599/avatar.png', 'uploads/-/system/user/avatar/6290669/avatar.png', 'user/avatar/6290669/avatar.png') ORDER BY \"uploads\".\"id\" ASC LIMIT 1000"
1 "SELECT \"uploads\".* FROM \"uploads\" WHERE \"uploads\".\"uploader\" = 'AvatarUploader' AND \"uploads\".\"path\" IN ('uploads/-/system/user/avatar/2324599/avatar.png', 'user/avatar/2324599/avatar.png', 'uploads/-/system/user/avatar/2683848/avatar.png', 'user/avatar/2683848/avatar.png') ORDER BY \"uploads\".\"id\" ASC LIMIT 1000"
1 "SELECT \"uploads\".* FROM \"uploads\" WHERE \"uploads\".\"uploader\" = 'AvatarUploader' AND \"uploads\".\"path\" IN ('uploads/-/system/user/avatar/2324599/avatar.png', 'user/avatar/2324599/avatar.png', 'uploads/-/system/user/avatar/1786152/avatar.png', 'user/avatar/1786152/avatar.png') ORDER BY \"uploads\".\"id\" ASC LIMIT 1000"
1 "SELECT \"uploads\".* FROM \"uploads\" WHERE \"uploads\".\"uploader\" = 'AvatarUploader' AND \"uploads\".\"path\" IN ('uploads/-/system/user/avatar/2324599/avatar.png', 'user/avatar/2324599/avatar.png', 'uploads/-/system/user/avatar/120073/avatar.png', 'user/avatar/120073/avatar.png') ORDER BY \"uploads\".\"id\" ASC LIMIT 1000"
1 "SELECT \"services\".* FROM \"services\" WHERE \"services\".\"project_id\" = 278964"
1 "SELECT \"saml_providers\".* FROM \"saml_providers\" WHERE \"saml_providers\".\"group_id\" = 9970 LIMIT 1"
1 "SELECT \"protected_environments\".* FROM \"protected_environments\" WHERE \"protected_environments\".\"project_id\" = 278964 AND \"protected_environments\".\"name\" = 'review/qa-shl-replace-rspec-meta-from-export-file-download-spec' LIMIT 1"
1 "SELECT \"protected_environments\".* FROM \"protected_environments\" WHERE \"protected_environments\".\"project_id\" = 278964 AND \"protected_environments\".\"name\" = 'review-docs/mr-58733' LIMIT 1"
1 "SELECT \"protected_environments\".* FROM \"protected_environments\" WHERE \"protected_environments\".\"project_id\" = 278964 AND \"protected_environments\".\"name\" = 'review/auto-cleanup' LIMIT 1"
1 "SELECT \"protected_environments\".* FROM \"protected_environments\" WHERE \"protected_environments\".\"project_id\" = 278964 AND \"protected_environments\".\"name\" = 'review/${CI_COMMIT_REF_SLUG}${FREQUENCY}' LIMIT 1"
1 "SELECT \"protected_environments\".* FROM \"protected_environments\" WHERE \"protected_environments\".\"project_id\" = 278964 AND \"protected_environments\".\"name\" = 'release' LIMIT 1"
1 "SELECT \"protected_environments\".* FROM \"protected_environments\" WHERE \"protected_environments\".\"project_id\" = 278964 AND \"protected_environments\".\"name\" = 'pre' LIMIT 1"
1 "SELECT \"protected_environments\".* FROM \"protected_environments\" WHERE \"protected_environments\".\"project_id\" = 278964 AND \"protected_environments\".\"name\" = 'gstg' LIMIT 1"
1 "SELECT \"protected_environments\".* FROM \"protected_environments\" WHERE \"protected_environments\".\"project_id\" = 278964 AND \"protected_environments\".\"name\" = 'gprd' LIMIT 1"
1 "SELECT \"protected_environments\".* FROM \"protected_environments\" WHERE \"protected_environments\".\"project_id\" = 278964 AND \"protected_environments\".\"name\" = 'gprd-cny' LIMIT 1"
1 "SELECT \"protected_branch_push_access_levels\".* FROM \"protected_branch_push_access_levels\" WHERE \"protected_branch_push_access_levels\".\"protected_branch_id\" = 109607"
1 "SELECT \"projects\".\"id\" AS t0_r0, \"projects\".\"name\" AS t0_r1, \"projects\".\"path\" AS t0_r2, \"projects\".\"description\" AS t0_r3, \"projects\".\"created_at\" AS t0_r4, \"projects\".\"updated_at\" AS t0_r5, \"projects\".\"creator_id\" AS t0_r6, \"projects\".\"namespace_id\" AS t0_r7, \"projects\".\"last_activity_at\" AS t0_r8, \"projects\".\"import_url\" AS t0_r9, \"projects\".\"visibility_level\" AS t0_r10, \"projects\".\"archived\" AS t0_r11, \"projects\".\"merge_requests_template\" AS t0_r12, \"projects\".\"star_count\" AS t0_r13, \"projects\".\"merge_requests_rebase_enabled\" AS t0_r14, \"projects\".\"import_type\" AS t0_r15, \"projects\".\"import_source\" AS t0_r16, \"projects\".\"avatar\" AS t0_r17, \"projects\".\"approvals_before_merge\" AS t0_r18, \"projects\".\"reset_approvals_on_push\" AS t0_r19, \"projects\".\"merge_requests_ff_only_enabled\" AS t0_r20, \"projects\".\"issues_template\" AS t0_r21, \"projects\".\"mirror\" AS t0_r22, \"projects\".\"mirror_last_update_at\" AS t0_r23, \"projects\".\"mirror_last_successful_update_at\" AS t0_r24, \"projects\".\"mirror_user_id\" AS t0_r25, \"projects\".\"shared_runners_enabled\" AS t0_r26, \"projects\".\"runners_token\" AS t0_r27, \"projects\".\"build_coverage_regex\" AS t0_r28, \"projects\".\"build_allow_git_fetch\" AS t0_r29, \"projects\".\"build_timeout\" AS t0_r30, \"projects\".\"mirror_trigger_builds\" AS t0_r31, \"projects\".\"public_builds\" AS t0_r32, \"projects\".\"pending_delete\" AS t0_r33, \"projects\".\"last_repository_check_failed\" AS t0_r34, \"projects\".\"last_repository_check_at\" AS t0_r35, \"projects\".\"container_registry_enabled\" AS t0_r36, \"projects\".\"only_allow_merge_if_pipeline_succeeds\" AS t0_r37, \"projects\".\"has_external_issue_tracker\" AS t0_r38, \"projects\".\"repository_storage\" AS t0_r39, \"projects\".\"request_access_enabled\" AS t0_r40, \"projects\".\"has_external_wiki\" AS t0_r41, \"projects\".\"repository_read_only\" AS t0_r42, \"projects\".\"lfs_enabled\" AS t0_r43, \"projects\".\"description_html\" AS t0_r44, \"projects\".\"only_allow_merge_if_all_discussions_are_resolved\" AS t0_r45, \"projects\".\"repository_size_limit\" AS t0_r46, \"projects\".\"service_desk_enabled\" AS t0_r47, \"projects\".\"printing_merge_request_link_enabled\" AS t0_r48, \"projects\".\"auto_cancel_pending_pipelines\" AS t0_r49, \"projects\".\"cached_markdown_version\" AS t0_r50, \"projects\".\"last_repository_updated_at\" AS t0_r51, \"projects\".\"ci_config_path\" AS t0_r52, \"projects\".\"disable_overriding_approvers_per_merge_request\" AS t0_r53, \"projects\".\"delete_error\" AS t0_r54, \"projects\".\"storage_version\" AS t0_r55, \"projects\".\"resolve_outdated_diff_discussions\" AS t0_r56, \"projects\".\"remote_mirror_available_overridden\" AS t0_r57, \"projects\".\"only_mirror_protected_branches\" AS t0_r58, \"projects\".\"pull_mirror_available_overridden\" AS t0_r59, \"projects\".\"jobs_cache_index\" AS t0_r60, \"projects\".\"external_authorization_classification_label\" AS t0_r61, \"projects\".\"mirror_overwrites_diverged_branches\" AS t0_r62, \"projects\".\"external_webhook_token\" AS t0_r63, \"projects\".\"pages_https_only\" AS t0_r64, \"projects\".\"packages_enabled\" AS t0_r65, \"projects\".\"merge_requests_author_approval\" AS t0_r66, \"projects\".\"pool_repository_id\" AS t0_r67, \"projects\".\"runners_token_encrypted\" AS t0_r68, \"projects\".\"bfg_object_map\" AS t0_r69, \"projects\".\"detected_repository_languages\" AS t0_r70, \"projects\".\"merge_requests_disable_committers_approval\" AS t0_r71, \"projects\".\"require_password_to_approve\" AS t0_r72, \"projects\".\"emails_disabled\" AS t0_r73, \"projects\".\"max_pages_size\" AS t0_r74, \"projects\".\"max_artifacts_size\" AS t0_r75, \"projects\".\"pull_mirror_branch_prefix\" AS t0_r76, \"projects\".\"remove_source_branch_after_merge\" AS t0_r77, \"projects\".\"marked_for_deletion_at\" AS t0_r78, \"projects\".\"marked_for_deletion_by_user_id\" AS t0_r79, \"projects\".\"suggestion_commit_message\" AS t0_r80, \"projects\".\"autoclose_referenced_issues\" AS t0_r81, \"routes\".\"id\" AS t1_r0, \"routes\".\"source_id\" AS t1_r1, \"routes\".\"source_type\" AS t1_r2, \"routes\".\"path\" AS t1_r3, \"routes\".\"created_at\" AS t1_r4, \"routes\".\"updated_at\" AS t1_r5, \"routes\".\"name\" AS t1_r6 FROM \"projects\" LEFT OUTER JOIN \"routes\" ON \"routes\".\"source_type\" = 'Project' AND \"routes\".\"source_id\" = \"projects\".\"id\" WHERE \"routes\".\"path\" = 'gitlab-org/gitlab' LIMIT 1"
1 "SELECT \"projects\".* FROM \"projects\" WHERE \"projects\".\"id\" = 278964"
1 "SELECT \"projects\".* FROM \"projects\" INNER JOIN \"cluster_projects\" ON \"projects\".\"id\" = \"cluster_projects\".\"project_id\" WHERE \"cluster_projects\".\"cluster_id\" = 108898 ORDER BY \"projects\".\"id\" ASC LIMIT 1"
1 "SELECT \"project_features\".* FROM \"project_features\" WHERE \"project_features\".\"project_id\" = 278964 LIMIT 1"
1 "SELECT \"namespaces\".* FROM \"namespaces\" WHERE \"namespaces\".\"type\" = 'Group' AND \"namespaces\".\"id\" = 9970 AND \"namespaces\".\"type\" = 'Group' LIMIT 1"
1 "SELECT \"namespaces\".* FROM \"namespaces\" WHERE \"namespaces\".\"type\" = 'Group' AND \"namespaces\".\"id\" = 2584649 LIMIT 1"
1 "SELECT \"namespaces\".* FROM \"namespaces\" INNER JOIN \"cluster_groups\" ON \"namespaces\".\"id\" = \"cluster_groups\".\"group_id\" WHERE \"namespaces\".\"type\" = 'Group' AND \"cluster_groups\".\"cluster_id\" = 774 ORDER BY \"namespaces\".\"id\" ASC LIMIT 1"
1 "SELECT \"namespaces\".* FROM \"namespaces\" INNER JOIN \"cluster_groups\" ON \"namespaces\".\"id\" = \"cluster_groups\".\"group_id\" WHERE \"namespaces\".\"type\" = 'Group' AND \"cluster_groups\".\"cluster_id\" = 108898 ORDER BY \"namespaces\".\"id\" ASC LIMIT 1"
1 "SELECT MAX(\"project_authorizations\".\"access_level\") AS maximum_access_level, \"project_authorizations\".\"user_id\" AS project_authorizations_user_id FROM \"project_authorizations\" WHERE \"project_authorizations\".\"project_id\" = 278964 AND \"project_authorizations\".\"user_id\" = 758045 GROUP BY \"project_authorizations\".\"user_id\""
1 "SELECT \"ip_restrictions\".* FROM \"ip_restrictions\" WHERE \"ip_restrictions\".\"group_id\" = 9970"
1 "SELECT \"environments\".* FROM \"environments\" WHERE \"environments\".\"project_id\" = 278964 AND (\"environments\".\"state\" IN ('available')) AND \"environments\".\"id\" IN (1178942, 1176592, 1176344, 1197349, 1853312, 4897571, 4897124)"
1 "SELECT \"environments\".* FROM \"environments\" WHERE \"environments\".\"id\" = 4897571 LIMIT 1"
1 "SELECT \"environments\".* FROM \"environments\" WHERE \"environments\".\"id\" = 1853312 LIMIT 1"
1 "SELECT \"environments\".* FROM \"environments\" WHERE \"environments\".\"id\" = 1197349 LIMIT 1"
1 "SELECT \"emails\".* FROM \"emails\" WHERE \"emails\".\"user_id\" = 829774"
1 "SELECT \"emails\".* FROM \"emails\" WHERE \"emails\".\"user_id\" = 655908"
1 "SELECT \"emails\".* FROM \"emails\" WHERE \"emails\".\"user_id\" = 6290669"
1 "SELECT \"emails\".* FROM \"emails\" WHERE \"emails\".\"user_id\" = 2683848"
1 "SELECT \"emails\".* FROM \"emails\" WHERE \"emails\".\"user_id\" = 2632430"
1 "SELECT \"emails\".* FROM \"emails\" WHERE \"emails\".\"user_id\" = 1786152"
1 "SELECT \"emails\".* FROM \"emails\" WHERE \"emails\".\"user_id\" = 15139"
1 "SELECT \"emails\".* FROM \"emails\" WHERE \"emails\".\"user_id\" = 120073"
1 "SELECT DISTINCT \"plans\".* FROM \"plans\" INNER JOIN \"gitlab_subscriptions\" ON \"gitlab_subscriptions\".\"hosted_plan_id\" = \"plans\".\"id\" WHERE \"plans\".\"name\" IN ('bronze', 'silver', 'premium', 'gold', 'ultimate') AND \"gitlab_subscriptions\".\"namespace_id\" = 9970"
1 "SELECT \"deployments\".* FROM \"deployments\" WHERE \"deployments\".\"environment_id\" = 4897571 AND \"deployments\".\"status\" = 1 ORDER BY deployments.id DESC LIMIT 1"
1 "SELECT \"deployments\".* FROM \"deployments\" WHERE \"deployments\".\"environment_id\" = 4897124 AND \"deployments\".\"status\" = 2 ORDER BY deployments.id DESC LIMIT 1"
1 "SELECT \"deployments\".* FROM \"deployments\" WHERE \"deployments\".\"environment_id\" = 4897124 AND \"deployments\".\"status\" = 1 ORDER BY deployments.id DESC LIMIT 1"
1 "SELECT \"deployments\".* FROM \"deployments\" WHERE \"deployments\".\"environment_id\" = 1853312 AND \"deployments\".\"status\" = 1 ORDER BY deployments.id DESC LIMIT 1"
1 "SELECT \"deployments\".* FROM \"deployments\" WHERE \"deployments\".\"environment_id\" = 1197349 AND \"deployments\".\"status\" = 1 ORDER BY deployments.id DESC LIMIT 1"
1 "SELECT \"deployments\".* FROM \"deployments\" WHERE \"deployments\".\"environment_id\" = 1178942 AND \"deployments\".\"status\" = 1 ORDER BY deployments.id DESC LIMIT 1"
1 "SELECT \"deployments\".* FROM \"deployments\" WHERE \"deployments\".\"environment_id\" = 1176592 AND \"deployments\".\"status\" = 1 ORDER BY deployments.id DESC LIMIT 1"
1 "SELECT \"deployments\".* FROM \"deployments\" WHERE \"deployments\".\"environment_id\" = 1176344 AND \"deployments\".\"status\" = 1 ORDER BY deployments.id DESC LIMIT 1"
1 "SELECT \"deployment_clusters\".* FROM \"deployment_clusters\" WHERE \"deployment_clusters\".\"deployment_id\" = 143818411 LIMIT 1"
1 "SELECT \"deployment_clusters\".* FROM \"deployment_clusters\" WHERE \"deployment_clusters\".\"deployment_id\" = 143814435 LIMIT 1"
1 "SELECT \"deployment_clusters\".* FROM \"deployment_clusters\" WHERE \"deployment_clusters\".\"deployment_id\" = 143796641 LIMIT 1"
1 "SELECT \"deployment_clusters\".* FROM \"deployment_clusters\" WHERE \"deployment_clusters\".\"deployment_id\" = 143783467 LIMIT 1"
1 "SELECT \"deployment_clusters\".* FROM \"deployment_clusters\" WHERE \"deployment_clusters\".\"deployment_id\" = 137973115 LIMIT 1"
1 "SELECT \"deployment_clusters\".* FROM \"deployment_clusters\" WHERE \"deployment_clusters\".\"deployment_id\" = 116108093 LIMIT 1"
1 "SELECT COUNT(*) AS count_all, \"environments\".\"state\" AS environments_state FROM \"environments\" WHERE \"environments\".\"project_id\" = 278964 GROUP BY \"environments\".\"state\""
1 "SELECT COUNT(*) AS count_all, COALESCE(environment_type, name) AS coalesce_environment_type_name FROM \"environments\" WHERE \"environments\".\"project_id\" = 278964 AND (\"environments\".\"state\" IN ('available')) GROUP BY COALESCE(environment_type, name) LIMIT 10001"
1 "SELECT COALESCE(environment_type, name) AS folder, COUNT(*) AS size, MAX(id) AS last_id FROM \"environments\" WHERE \"environments\".\"project_id\" = 278964 AND (\"environments\".\"state\" IN ('available')) GROUP BY COALESCE(environment_type, name) ORDER BY folder ASC LIMIT 20 OFFSET 0"
1 "SELECT \"clusters\".* FROM \"clusters\" WHERE \"clusters\".\"id\" = 108898 LIMIT 1"
1 "SELECT \"ci_pipelines\".* FROM \"ci_pipelines\" WHERE \"ci_pipelines\".\"id\" = 282465217 LIMIT 1"
1 "SELECT \"ci_builds_metadata\".* FROM \"ci_builds_metadata\" WHERE \"ci_builds_metadata\".\"build_id\" = 1158529349 LIMIT 1"
1 "SELECT \"ci_builds_metadata\".* FROM \"ci_builds_metadata\" WHERE \"ci_builds_metadata\".\"build_id\" = 1158529325 LIMIT 1"
1 "SELECT \"ci_builds\".* FROM \"ci_builds\" WHERE \"ci_builds\".\"type\" = 'Ci::Build' AND \"ci_builds\".\"commit_id\" = 282465217 AND (\"ci_builds\".\"retried\" = FALSE OR \"ci_builds\".\"retried\" IS NULL) AND \"ci_builds\".\"when\" = 'manual' AND \"ci_builds\".\"status\" IN ('success', 'failed', 'canceled', 'skipped', 'manual') AND \"ci_builds\".\"name\" != 'review-deploy'"
1 "SELECT \"ci_builds\".* FROM \"ci_builds\" WHERE \"ci_builds\".\"type\" = 'Ci::Build' AND \"ci_builds\".\"commit_id\" = 282465217 AND (\"ci_builds\".\"retried\" = FALSE OR \"ci_builds\".\"retried\" IS NULL) AND \"ci_builds\".\"when\" = 'delayed' AND \"ci_builds\".\"status\" IN ('success', 'failed', 'canceled', 'skipped', 'scheduled') AND \"ci_builds\".\"name\" != 'review-deploy'"
1 "SELECT \"ci_builds\".* FROM \"ci_builds\" WHERE \"ci_builds\".\"id\" = 1158529349 LIMIT 1"
1 "SELECT \"alert_management_alerts\".* FROM \"alert_management_alerts\" WHERE \"alert_management_alerts\".\"environment_id\" = 4897571 AND (\"alert_management_alerts\".\"status\" IN (0,1)) ORDER BY \"alert_management_alerts\".\"severity\" ASC, \"alert_management_alerts\".\"started_at\" DESC LIMIT 1"
1 "SELECT \"alert_management_alerts\".* FROM \"alert_management_alerts\" WHERE \"alert_management_alerts\".\"environment_id\" = 4897124 AND (\"alert_management_alerts\".\"status\" IN (0,1)) ORDER BY \"alert_management_alerts\".\"severity\" ASC, \"alert_management_alerts\".\"started_at\" DESC LIMIT 1"
1 "SELECT \"alert_management_alerts\".* FROM \"alert_management_alerts\" WHERE \"alert_management_alerts\".\"environment_id\" = 1853312 AND (\"alert_management_alerts\".\"status\" IN (0,1)) ORDER BY \"alert_management_alerts\".\"severity\" ASC, \"alert_management_alerts\".\"started_at\" DESC LIMIT 1"
1 "SELECT \"alert_management_alerts\".* FROM \"alert_management_alerts\" WHERE \"alert_management_alerts\".\"environment_id\" = 1197349 AND (\"alert_management_alerts\".\"status\" IN (0,1)) ORDER BY \"alert_management_alerts\".\"severity\" ASC, \"alert_management_alerts\".\"started_at\" DESC LIMIT 1"
1 "SELECT \"alert_management_alerts\".* FROM \"alert_management_alerts\" WHERE \"alert_management_alerts\".\"environment_id\" = 1178942 AND (\"alert_management_alerts\".\"status\" IN (0,1)) ORDER BY \"alert_management_alerts\".\"severity\" ASC, \"alert_management_alerts\".\"started_at\" DESC LIMIT 1"
1 "SELECT \"alert_management_alerts\".* FROM \"alert_management_alerts\" WHERE \"alert_management_alerts\".\"environment_id\" = 1176592 AND (\"alert_management_alerts\".\"status\" IN (0,1)) ORDER BY \"alert_management_alerts\".\"severity\" ASC, \"alert_management_alerts\".\"started_at\" DESC LIMIT 1"
1 "SELECT \"alert_management_alerts\".* FROM \"alert_management_alerts\" WHERE \"alert_management_alerts\".\"environment_id\" = 1176344 AND (\"alert_management_alerts\".\"status\" IN (0,1)) ORDER BY \"alert_management_alerts\".\"severity\" ASC, \"alert_management_alerts\".\"started_at\" DESC LIMIT 1"
1 "SELECT 1 AS one FROM \"users\" INNER JOIN \"members\" ON \"users\".\"id\" = \"members\".\"user_id\" WHERE \"members\".\"type\" = 'GroupMember' AND \"members\".\"source_type\" = 'Namespace' AND \"members\".\"source_id\" = 2584649 AND \"members\".\"source_type\" = 'Namespace' AND \"members\".\"requested_at\" IS NULL AND \"members\".\"access_level\" != 5 AND \"users\".\"id\" = 758045 LIMIT 1"
1 "SELECT 1 AS one FROM ((SELECT \"clusters\".* FROM \"clusters\" INNER JOIN \"cluster_projects\" ON \"clusters\".\"id\" = \"cluster_projects\".\"cluster_id\" WHERE \"cluster_projects\".\"project_id\" = 278964)\nUNION\n(SELECT \"clusters\".* FROM \"clusters\" INNER JOIN \"cluster_groups\" ON \"cluster_groups\".\"cluster_id\" = \"clusters\".\"id\" INNER JOIN \"namespaces\" ON \"namespaces\".\"id\" = \"cluster_groups\".\"group_id\" AND \"namespaces\".\"type\" = 'Group' WHERE \"cluster_groups\".\"group_id\" IN (SELECT \"namespaces\".\"id\" FROM (SELECT \"namespaces\".* FROM \"namespaces\" INNER JOIN (SELECT \"id\", \"depth\" FROM (WITH RECURSIVE \"base_and_ancestors\" AS ((SELECT \"namespaces\".* FROM \"namespaces\" WHERE \"namespaces\".\"type\" = 'Group' AND \"namespaces\".\"id\" = 9970)\nUNION\n(SELECT \"namespaces\".* FROM \"namespaces\", \"base_and_ancestors\" WHERE \"namespaces\".\"type\" = 'Group' AND \"namespaces\".\"id\" = \"base_and_ancestors\".\"parent_id\")) SELECT DISTINCT \"namespaces\".*, ROW_NUMBER() OVER () as depth FROM \"base_and_ancestors\" AS \"namespaces\") AS \"namespaces\" WHERE \"namespaces\".\"type\" = 'Group') namespaces_join_table on namespaces_join_table.id = namespaces.id WHERE \"namespaces\".\"type\" = 'Group' ORDER BY \"namespaces_join_table\".\"depth\" ASC) AS \"namespaces\" WHERE \"namespaces\".\"type\" = 'Group'))\nUNION\n(SELECT \"clusters\".* FROM \"clusters\" WHERE \"clusters\".\"cluster_type\" = 1)) clusters LIMIT 1"
Proposal
Properly preload
associtations.
diff --git a/app/serializers/environment_serializer.rb b/app/serializers/environment_serializer.rb
index 598ce5f9e4f..89156603d91 100644
--- a/app/serializers/environment_serializer.rb
+++ b/app/serializers/environment_serializer.rb
@@ -16,6 +16,8 @@ class EnvironmentSerializer < BaseSerializer
end
def represent(resource, opts = {})
+ resource.preload(:project, :last_deployment...)
+
if itemized?
itemize(resource).map do |item|
{ name: item.name,
Edited by Shinya Maeda