Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Integration branch for #4336 #4823

Draft
wants to merge 4 commits into
base: main
Choose a base branch
from

Conversation

aqrln
Copy link
Member

@aqrln aqrln commented Apr 10, 2024

aqrln and others added 4 commits April 10, 2024 00:12
Prevent `prisma:engine:response_json_serialization` span from being
orphan when using interactive transactions.

This check made sense in the past in principle when there were no child
spans outside of the iTX runner, and the `prisma:engine` span didn't
cover the whole `Engine::query` method duration, but now it makes more
sense to always create it.

Fixes: prisma/prisma#21402
@aqrln aqrln added this to the 5.13.0 milestone Apr 10, 2024
Copy link
Contributor

WASM Query Engine file Size

Engine This PR Base branch Diff
Postgres 2.123MiB 2.122MiB 302.000B
Postgres (gzip) 835.804KiB 835.682KiB 125.000B
Mysql 2.093MiB 2.092MiB 293.000B
Mysql (gzip) 823.950KiB 823.416KiB 547.000B
Sqlite 1.988MiB 1.987MiB 296.000B
Sqlite (gzip) 784.080KiB 783.936KiB 147.000B

Copy link

codspeed-hq bot commented Apr 10, 2024

CodSpeed Performance Report

Merging #4823 will degrade performances by 5.46%

Comparing integration/qe-always-create-a-span-for-prisma-engine-regardless-of-itx (46637e0) with main (6144ce0)

Summary

❌ 1 regressions
✅ 10 untouched benchmarks

⚠️ Please fix the performance issues or acknowledge them on CodSpeed.

Benchmarks breakdown

Benchmark main integration/qe-always-create-a-span-for-prisma-engine-regardless-of-itx Change
large_read 7.7 ms 8.1 ms -5.46%

Copy link
Contributor

✅ WASM query-engine performance won't change substantially (0.992x)

Full benchmark report
DATABASE_URL="postgresql://postgres:postgres@localhost:5432/bench?schema=imdb_bench&sslmode=disable" \
node --experimental-wasm-modules query-engine/driver-adapters/executor/dist/bench.mjs
"
"
"
"
"
"
"
"
"
"
"
"
"
"
"
"
"
"
"
"
"
"
"
"
"
"
"
"
"
"
"
"
"
"
"
"
cpu: AMD EPYC 7763 64-Core Processor
runtime: node v18.20.1 (x64-linux)

benchmark                   time (avg)             (min … max)       p75       p99      p999
-------------------------------------------------------------- -----------------------------
• movies.findMany() (all - ~50K)
-------------------------------------------------------------- -----------------------------
Web Assembly: Baseline     364 ms/iter       (361 ms … 371 ms)    365 ms    371 ms    371 ms
Web Assembly: Latest       449 ms/iter       (448 ms … 450 ms)    450 ms    450 ms    450 ms
Web Assembly: Current      448 ms/iter       (446 ms … 451 ms)    450 ms    451 ms    451 ms
Node API: Current          199 ms/iter       (197 ms … 203 ms)    199 ms    203 ms    203 ms

summary for movies.findMany() (all - ~50K)
  Web Assembly: Current
   2.26x slower than Node API: Current
   1.23x slower than Web Assembly: Baseline
   1x faster than Web Assembly: Latest

• movies.findMany({ take: 2000 })
-------------------------------------------------------------- -----------------------------
Web Assembly: Baseline  14'917 µs/iter (14'638 µs … 17'435 µs) 14'779 µs 17'435 µs 17'435 µs
Web Assembly: Latest    18'291 µs/iter (18'174 µs … 18'928 µs) 18'323 µs 18'928 µs 18'928 µs
Web Assembly: Current   18'503 µs/iter (17'969 µs … 22'174 µs) 18'851 µs 22'174 µs 22'174 µs
Node API: Current        8'070 µs/iter   (7'936 µs … 8'396 µs)  8'094 µs  8'396 µs  8'396 µs

summary for movies.findMany({ take: 2000 })
  Web Assembly: Current
   2.29x slower than Node API: Current
   1.24x slower than Web Assembly: Baseline
   1.01x slower than Web Assembly: Latest

• movies.findMany({ where: {...}, take: 2000 })
-------------------------------------------------------------- -----------------------------
Web Assembly: Baseline   2'271 µs/iter   (2'176 µs … 3'396 µs)  2'263 µs  3'091 µs  3'396 µs
Web Assembly: Latest     2'855 µs/iter   (2'763 µs … 3'629 µs)  2'849 µs  3'438 µs  3'629 µs
Web Assembly: Current    2'827 µs/iter   (2'733 µs … 3'489 µs)  2'823 µs  3'231 µs  3'489 µs
Node API: Current        1'451 µs/iter   (1'322 µs … 2'297 µs)  1'435 µs  2'115 µs  2'297 µs

summary for movies.findMany({ where: {...}, take: 2000 })
  Web Assembly: Current
   1.95x slower than Node API: Current
   1.25x slower than Web Assembly: Baseline
   1.01x faster than Web Assembly: Latest

• movies.findMany({ include: { cast: true } take: 2000 }) (m2m)
-------------------------------------------------------------- -----------------------------
Web Assembly: Baseline     565 ms/iter       (558 ms … 590 ms)    565 ms    590 ms    590 ms
Web Assembly: Latest       784 ms/iter       (778 ms … 810 ms)    785 ms    810 ms    810 ms
Web Assembly: Current      780 ms/iter       (772 ms … 800 ms)    792 ms    800 ms    800 ms
Node API: Current          474 ms/iter       (465 ms … 489 ms)    481 ms    489 ms    489 ms

summary for movies.findMany({ include: { cast: true } take: 2000 }) (m2m)
  Web Assembly: Current
   1.64x slower than Node API: Current
   1.38x slower than Web Assembly: Baseline
   1.01x faster than Web Assembly: Latest

• movies.findMany({ where: {...}, include: { cast: true } take: 2000 }) (m2m)
-------------------------------------------------------------- -----------------------------
Web Assembly: Baseline  77'842 µs/iter (77'623 µs … 78'264 µs) 78'053 µs 78'264 µs 78'264 µs
Web Assembly: Latest       110 ms/iter       (110 ms … 110 ms)    110 ms    110 ms    110 ms
Web Assembly: Current      109 ms/iter       (109 ms … 111 ms)    110 ms    111 ms    111 ms
Node API: Current       60'863 µs/iter (60'104 µs … 61'714 µs) 61'601 µs 61'714 µs 61'714 µs

summary for movies.findMany({ where: {...}, include: { cast: true } take: 2000 }) (m2m)
  Web Assembly: Current
   1.8x slower than Node API: Current
   1.41x slower than Web Assembly: Baseline
   1x faster than Web Assembly: Latest

• movies.findMany({ take: 2000, include: { cast: { include: { person: true } } } })
-------------------------------------------------------------- -----------------------------
Web Assembly: Baseline   1'008 ms/iter   (1'001 ms … 1'024 ms)  1'022 ms  1'024 ms  1'024 ms
Web Assembly: Latest     1'304 ms/iter   (1'297 ms … 1'315 ms)  1'306 ms  1'315 ms  1'315 ms
Web Assembly: Current    1'303 ms/iter   (1'289 ms … 1'314 ms)  1'310 ms  1'314 ms  1'314 ms
Node API: Current          888 ms/iter       (842 ms … 922 ms)    917 ms    922 ms    922 ms

summary for movies.findMany({ take: 2000, include: { cast: { include: { person: true } } } })
  Web Assembly: Current
   1.47x slower than Node API: Current
   1.29x slower than Web Assembly: Baseline
   1x faster than Web Assembly: Latest

• movie.findMany({ where: { ... }, take: 2000, include: { cast: { include: { person: true } } } })
-------------------------------------------------------------- -----------------------------
Web Assembly: Baseline     140 ms/iter       (139 ms … 141 ms)    141 ms    141 ms    141 ms
Web Assembly: Latest       182 ms/iter       (180 ms … 185 ms)    182 ms    185 ms    185 ms
Web Assembly: Current      181 ms/iter       (180 ms … 182 ms)    181 ms    182 ms    182 ms
Node API: Current          106 ms/iter       (105 ms … 106 ms)    106 ms    106 ms    106 ms

summary for movie.findMany({ where: { ... }, take: 2000, include: { cast: { include: { person: true } } } })
  Web Assembly: Current
   1.71x slower than Node API: Current
   1.29x slower than Web Assembly: Baseline
   1.01x faster than Web Assembly: Latest

• movie.findMany({ where: { reviews: { author: { ... } }, take: 100 }) (to-many -> to-one)
-------------------------------------------------------------- -----------------------------
Web Assembly: Baseline   1'035 µs/iter     (978 µs … 1'692 µs)  1'030 µs  1'574 µs  1'692 µs
Web Assembly: Latest     1'454 µs/iter   (1'299 µs … 2'575 µs)  1'402 µs  2'529 µs  2'575 µs
Web Assembly: Current    1'356 µs/iter   (1'301 µs … 1'947 µs)  1'359 µs  1'747 µs  1'947 µs
Node API: Current          764 µs/iter       (711 µs … 945 µs)    790 µs    841 µs    945 µs

summary for movie.findMany({ where: { reviews: { author: { ... } }, take: 100 }) (to-many -> to-one)
  Web Assembly: Current
   1.78x slower than Node API: Current
   1.31x slower than Web Assembly: Baseline
   1.07x faster than Web Assembly: Latest

• movie.findMany({ where: { cast: { person: { ... } }, take: 100 }) (m2m -> to-one)
-------------------------------------------------------------- -----------------------------
Web Assembly: Baseline   1'041 µs/iter     (985 µs … 1'710 µs)  1'034 µs  1'639 µs  1'710 µs
Web Assembly: Latest     1'356 µs/iter   (1'301 µs … 1'776 µs)  1'361 µs  1'704 µs  1'776 µs
Web Assembly: Current    1'383 µs/iter   (1'323 µs … 2'241 µs)  1'377 µs  2'115 µs  2'241 µs
Node API: Current          772 µs/iter     (713 µs … 1'036 µs)    806 µs    851 µs  1'036 µs

summary for movie.findMany({ where: { cast: { person: { ... } }, take: 100 }) (m2m -> to-one)
  Web Assembly: Current
   1.79x slower than Node API: Current
   1.33x slower than Web Assembly: Baseline
   1.02x slower than Web Assembly: Latest

After changes in 46637e0

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants