squiggle icon indicating copy to clipboard operation
squiggle copied to clipboard

Save (updateSquiggleSnippetModel) runs too many queries

Open berekuk opened this issue 2 years ago • 1 comments

29 queries for a request that has some exports, ~26-27 without exports.

Overall it takes ~0.9-1s.

Most of these look like auth checks, possibly can be optimized with caches.

Another thing we could do is move the GraphQL API route and database closer to each other, either by switching to Vercel Postgres or by moving the GraphQL backend to Digital Ocean.

https://discord.com/channels/1130609991993274510/1133551706370752582/1180573887277318257

prisma:query SELECT 1
prisma:query SELECT "public"."Session"."id", "public"."Session"."sessionToken", "public"."Session"."userId", "public"."Session"."expires" FROM "public"."Session" WHERE ("public"."Session"."sessionToken" = $1 AND 1=1) LIMIT $2 OFFSET $3
prisma:query SELECT "public"."User"."id", "public"."User"."name", "public"."User"."email", "public"."User"."emailVerified", "public"."User"."image", "public"."User"."ownerId" FROM "public"."User" WHERE "public"."User"."id" IN ($1) OFFSET $2
prisma:query SELECT "public"."User"."id", "public"."User"."name", "public"."User"."email", "public"."User"."emailVerified", "public"."User"."image", "public"."User"."ownerId" FROM "public"."User" WHERE ("public"."User"."id" = $1 AND 1=1) LIMIT $2 OFFSET $3
prisma:query SELECT "public"."Owner"."id", "public"."Owner"."slug" FROM "public"."Owner" WHERE "public"."Owner"."id" IN ($1) OFFSET $2
prisma:query SELECT "public"."Model"."id", "public"."Model"."slug", "public"."Model"."createdAt", "public"."Model"."updatedAt", "public"."Model"."ownerId", "public"."Model"."isPrivate", "public"."Model"."currentRevisionId" FROM "public"."Model" LEFT JOIN "public"."Owner" AS "j1" ON ("j1"."id") = ("public"."Model"."ownerId") LEFT JOIN "public"."User" AS "j2" ON ("j2"."ownerId") = ("j1"."id") LEFT JOIN "public"."Group" AS "j3" ON ("j3"."ownerId") = ("j1"."id") WHERE ("public"."Model"."slug" = $1 AND ("j1"."slug" = $2 AND (("j2"."email" = $3 AND ("j2"."id" IS NOT NULL)) OR (("j3"."id") IN (SELECT "t4"."groupId" FROM "public"."UserGroupMembership" AS "t4" LEFT JOIN "public"."User" AS "j5" ON ("j5"."id") = ("t4"."userId") WHERE ("j5"."email" = $4 AND ("j5"."id" IS NOT NULL) AND "t4"."groupId" IS NOT NULL)) AND ("j3"."id" IS NOT NULL))) AND ("j1"."id" IS NOT NULL))) LIMIT $5 OFFSET $6
prisma:query SELECT "public"."User"."id", "public"."User"."name", "public"."User"."email", "public"."User"."emailVerified", "public"."User"."image", "public"."User"."ownerId" FROM "public"."User" WHERE ("public"."User"."email" = $1 AND 1=1) LIMIT $2 OFFSET $3
prisma:query BEGIN
prisma:query SELECT "public"."User"."id" FROM "public"."User" WHERE ("public"."User"."id" = $1 AND 1=1) OFFSET $2
prisma:query SELECT "public"."Model"."id" FROM "public"."Model" WHERE ("public"."Model"."id" = $1 AND 1=1) OFFSET $2
prisma:query INSERT INTO "public"."SquiggleSnippet" ("id","code","version") VALUES ($1,$2,$3) RETURNING "public"."SquiggleSnippet"."id"
prisma:query INSERT INTO "public"."ModelRevision" ("id","createdAt","modelId","authorId","comment","contentType","contentId") VALUES ($1,$2,$3,$4,$5,CAST($6::text AS "public"."ModelType"),$7) RETURNING "public"."ModelRevision"."id"
prisma:query SELECT "public"."ModelRevision"."id", "public"."ModelRevision"."createdAt", "public"."ModelRevision"."modelId", "public"."ModelRevision"."authorId", "public"."ModelRevision"."comment", "public"."ModelRevision"."contentType"::text, "public"."ModelRevision"."contentId" FROM "public"."ModelRevision" WHERE "public"."ModelRevision"."id" = $1 LIMIT $2 OFFSET $3
prisma:query SELECT "public"."Model"."id" FROM "public"."Model" WHERE "public"."Model"."id" IN ($1) OFFSET $2
prisma:query UPDATE "public"."Model" SET "currentRevisionId" = $1, "updatedAt" = $2 WHERE ("public"."Model"."id" = $3 AND 1=1) RETURNING "public"."Model"."id", "public"."Model"."slug", "public"."Model"."createdAt", "public"."Model"."updatedAt", "public"."Model"."ownerId", "public"."Model"."isPrivate", "public"."Model"."currentRevisionId"
prisma:query COMMIT
prisma:query SELECT 1
prisma:query SELECT COUNT(*) FROM (SELECT "public"."Owner"."id" FROM "public"."Owner" LEFT JOIN "public"."User" AS "j1" ON ("j1"."ownerId") = ("public"."Owner"."id") LEFT JOIN "public"."Group" AS "j2" ON ("j2"."ownerId") = ("public"."Owner"."id") WHERE ("public"."Owner"."id" = $1 AND (("j1"."email" = $2 AND ("j1"."id" IS NOT NULL)) OR (("j2"."id") IN (SELECT "t3"."groupId" FROM "public"."UserGroupMembership" AS "t3" LEFT JOIN "public"."User" AS "j4" ON ("j4"."id") = ("t3"."userId") WHERE ("j4"."email" = $3 AND ("j4"."id" IS NOT NULL) AND "t3"."groupId" IS NOT NULL)) AND ("j2"."id" IS NOT NULL)))) OFFSET $4) AS "sub"
prisma:query SELECT "public"."Model"."id", "public"."Model"."slug", "public"."Model"."createdAt", "public"."Model"."updatedAt", "public"."Model"."ownerId", "public"."Model"."isPrivate", "public"."Model"."currentRevisionId" FROM "public"."Model" WHERE ("public"."Model"."id" = $1 AND 1=1) LIMIT $2 OFFSET $3
prisma:query SELECT "public"."Owner"."id", "public"."Owner"."slug" FROM "public"."Owner" WHERE "public"."Owner"."id" IN ($1) OFFSET $2
prisma:query SELECT "public"."User"."id", "public"."User"."name", "public"."User"."email", "public"."User"."emailVerified", "public"."User"."image", "public"."User"."ownerId" FROM "public"."User" WHERE "public"."User"."ownerId" IN ($1) OFFSET $2
prisma:query SELECT "public"."Group"."id", "public"."Group"."createdAt", "public"."Group"."updatedAt", "public"."Group"."ownerId", "public"."Group"."reusableInviteToken" FROM "public"."Group" WHERE "public"."Group"."ownerId" IN ($1) OFFSET $2
prisma:query SELECT "public"."ModelRevision"."id", "public"."ModelRevision"."createdAt", "public"."ModelRevision"."modelId", "public"."ModelRevision"."authorId", "public"."ModelRevision"."comment", "public"."ModelRevision"."contentType"::text, "public"."ModelRevision"."contentId" FROM "public"."ModelRevision" WHERE "public"."ModelRevision"."id" IN ($1) OFFSET $2
prisma:query SELECT "public"."SquiggleSnippet"."id", "public"."SquiggleSnippet"."code", "public"."SquiggleSnippet"."version" FROM "public"."SquiggleSnippet" WHERE "public"."SquiggleSnippet"."id" IN ($1) OFFSET $2
prisma:query SELECT "public"."ModelExport"."id", "public"."ModelExport"."modelRevisionId", "public"."ModelExport"."variableName", "public"."ModelExport"."title", "public"."ModelExport"."docstring", "public"."ModelExport"."variableType" FROM "public"."ModelExport" WHERE "public"."ModelExport"."modelRevisionId" IN ($1) OFFSET $2
prisma:query SELECT "public"."RelativeValuesExport"."id", "public"."RelativeValuesExport"."modelRevisionId", "public"."RelativeValuesExport"."definitionId", "public"."RelativeValuesExport"."variableName" FROM "public"."RelativeValuesExport" WHERE "public"."RelativeValuesExport"."modelRevisionId" IN ($1) OFFSET $2
prisma:query SELECT "public"."User"."id", "public"."User"."name", "public"."User"."email", "public"."User"."emailVerified", "public"."User"."image", "public"."User"."ownerId" FROM "public"."User" WHERE ("public"."User"."id" = $1 AND 1=1) LIMIT $2 OFFSET $3
prisma:query SELECT "public"."Owner"."id", "public"."Owner"."slug" FROM "public"."Owner" WHERE "public"."Owner"."id" IN ($1) OFFSET $2

berekuk avatar Dec 02 '23 19:12 berekuk

29 queries for a request that has some exports, ~26-27 without exports.

Now it's 42...

berekuk avatar Jan 10 '25 19:01 berekuk