Hexlet / hexlet-friends

https://friends.hexlet.io/
GNU Affero General Public License v3.0
66 stars 96 forks source link

sentry: Slow DB Query /repositories/ #440

Open fey opened 1 week ago

fey commented 1 week ago

https://nikolay-gagarinov.sentry.io/share/issue/04bd2032be5445a4bc35290158c57e4d/

FROM (
  WITH RECURSIVE "cte" AS (
  SELECT DISTINCT "contributors_repository"."id", ROW_NUMBER() OVER (
  ORDER BY COUNT("contributors_contribution"."id") FILTER (
  WHERE (
    "contributors_contribution"."type" = %s AND "contributors_contributor"."is_visible"
  )) DESC) AS "num", COUNT("contributors_contribution"."id") FILTER (
  WHERE (
    "contributors_contribution"."type" = %s AND "contributors_contributor"."is_visible"
  ))
  FROM "contributors_repository"
  LEFT OUTER JOIN "contributors_contribution" ON ("contributors_repository"."id" =
    "contributors_contribution"."repository_id")
  LEFT OUTER JOIN "contributors_contributor" ON ("contributors_contribution"."contributor_id" =
    "contributors_contributor"."id")
  INNER JOIN "contributors_repository_labels" ON ("contributors_repository"."id" =
    "contributors_repository_labels"."repository_id")
  INNER JOIN "contributors_label" ON ("contributors_repository_labels"."label_id" =
    "contributors_label"."id")
  INNER JOIN "contributors_repository_labels" T6 ON ("contributors_repository"."id" =
    T6."repository_id")
  INNER JOIN "contributors_label" T7 ON (T6."label_id" = T7."id")
  INNER JOIN "contributors_repository_labels" T8 ON ("contributors_repository"."id" =
    T8."repository_id")
  INNER JOIN "contributors_label" T9 ON (T8."label_id" = T9."id")
  WHERE (
    "contributors_repository"."is_visible" AND LOWER("contributors_label"."name") IN (
      %s, %s, %s, %s, %s, %s, %s, %s, %s, %s
    ) AND LOWER(T7."name") IN (
      %s, %s, %s, %s, %s, %s, %s, %s, %s, %s
    ) AND LOWER(T9."name") IN (
      %s, %s, %s, %s, %s, %s, %s, %s, %s, %s
    )
  )
  GROUP BY "contributors_repository"."id"
  ORDER BY COUNT("contributors_contribution"."id") FILTER (
  WHERE (
    "contributors_contribution"."type" = %s AND "contributors_contributor"."is_visible"
  )) DESC)
  SELECT DISTINCT "contributors_repository"."id" AS "col1", "contributors_repository"."name" AS "col2",
     "contributors_repository"."html_url" AS "col3", "contributors_repository"."is_tracked" AS "col4",
    "contributors_repository"."owner_id" AS "col5", "contributors_repository"."organization_id" AS
    "col6", "contributors_repository"."project_id" AS "col7", "contributors_repository"."full_name" AS
    "col8", "contributors_repository"."is_visible" AS "col9", COUNT("contributors_contribution"."id")
    FILTER (
  WHERE (
    "contributors_contribution"."type" = %s AND "contributors_contributor"."is_visible"
  )) AS "pull_requests", COUNT("contributors_contribution"."id") FILTER (
  WHERE (
    "contributors_contribution"."type" = %s AND "contributors_contributor"."is_visible"
  )) AS "issues", COUNT(DISTINCT "contributors_contribution"."contributor_id") FILTER (
  WHERE "contributors_contributor"."is_visible") AS "contributors_count", "cte"."num" AS "num"
  FROM "contributors_repository"
  LEFT OUTER JOIN "contributors_contribution" ON ("contributors_repository"."id" =
    "contributors_contribution"."repository_id")
  LEFT OUTER JOIN "contributors_contributor" ON ("contributors_contribution"."contributor_id" =
    "contributors_contributor"."id")
  INNER JOIN "contributors_repository_labels" ON ("contributors_repository"."id" =
    "contributors_repository_labels"."repository_id")
  INNER JOIN "contributors_label" ON ("contributors_repository_labels"."label_id" =
    "contributors_label"."id")
  INNER JOIN "contributors_repository_labels" T6 ON ("contributors_repository"."id" =
    T6."repository_id")
  INNER JOIN "contributors_label" T7 ON (T6."label_id" = T7."id")
  INNER JOIN "contributors_repository_labels" T8 ON ("contributors_repository"."id" =
    T8."repository_id")
  INNER JOIN "contributors_label" T9 ON (T8."label_id" = T9."id")
  INNER JOIN "cte" ON "contributors_repository"."id" = ("cte"."id")
  WHERE (
    "contributors_repository"."is_visible" AND LOWER("contributors_label"."name") IN (
      %s, %s, %s, %s, %s, %s, %s, %s, %s, %s
    ) AND LOWER(T7."name") IN (
      %s, %s, %s, %s, %s, %s, %s, %s, %s, %s
    ) AND LOWER(T9."name") IN (
      %s, %s, %s, %s, %s, %s, %s, %s, %s, %s
    )
  )
  GROUP BY 1, 13
) subquery```

labels
mathematica.php.makefile.fortran.scss.java.nsis.c.javascript.racket sort
-issues



нужно посмотреть в чем дело и мб улучшить запрос
fey commented 1 week ago

image