prisma-engines icon indicating copy to clipboard operation
prisma-engines copied to clipboard

experiment: custom value serializer

Open Weakky opened this issue 1 year ago • 2 comments

Overview

related issue: https://github.com/prisma/team-orm/issues/1141

experiment to improve query raw perf

To profile the query engine, you can build/run an example binary: cargo build --profile profiling --example repro

To seed the postgres database, have a look at https://github.com/prisma/query-benchmarks's README

Improvements seen so far:

Before

cpu: Apple M1 Max
runtime: node v18.17.1 (arm64-darwin)

benchmark               time (avg)             (min … max)       p75       p99      p999
---------------------------------------------------------- -----------------------------
• SELECT * FROM "Movie" (50000)
---------------------------------------------------------- -----------------------------
PG                     116 ms/iter       (111 ms … 121 ms)    119 ms    121 ms    121 ms
Prisma Rust (Napi)     457 ms/iter       (447 ms … 467 ms)    466 ms    467 ms    467 ms

summary for SELECT * FROM "Movie" (50000)
  PG
   3.94x faster than Prisma Rust (Napi)

After (direct serialization)

cpu: Apple M1 Max
runtime: node v18.17.1 (arm64-darwin)

benchmark               time (avg)             (min … max)       p75       p99      p999
---------------------------------------------------------- -----------------------------
• SELECT * FROM "Movie" (50000)
---------------------------------------------------------- -----------------------------
PG                     113 ms/iter       (112 ms … 116 ms)    115 ms    116 ms    116 ms
Prisma Rust (Napi)     307 ms/iter       (300 ms … 313 ms)    311 ms    313 ms    313 ms

summary for SELECT * FROM "Movie" (50000)
  PG
   2.71x faster than Prisma Rust (Napi)

After (direct serialization + array shape result)

cpu: Apple M1 Max
runtime: node v18.17.1 (arm64-darwin)

benchmark               time (avg)             (min … max)       p75       p99      p999
---------------------------------------------------------- -----------------------------
• SELECT * FROM "Movie" (50000)
---------------------------------------------------------- -----------------------------
PG                     140 ms/iter       (135 ms … 145 ms)    143 ms    145 ms    145 ms
Prisma Rust (Napi)     234 ms/iter       (228 ms … 239 ms)    238 ms    239 ms    239 ms

summary for SELECT * FROM "Movie" (50000)
  PG
   1.67x faster than Prisma Rust (Napi)

Weakky avatar Jun 19 '24 11:06 Weakky

WASM Query Engine file Size

Engine This PR Base branch Diff
Postgres 2.067MiB 2.043MiB 23.893KiB
Postgres (gzip) 824.144KiB 814.515KiB 9.629KiB
Mysql 2.035MiB 2.013MiB 22.292KiB
Mysql (gzip) 810.472KiB 801.075KiB 9.398KiB
Sqlite 1.933MiB 1.914MiB 18.900KiB
Sqlite (gzip) 771.105KiB 763.375KiB 7.730KiB

github-actions[bot] avatar Jun 19 '24 11:06 github-actions[bot]

CodSpeed Performance Report

Merging #4928 will not alter performance

Comparing perf/custom-value-serializer (3670da3) with main (d56fe2e)

Summary

✅ 11 untouched benchmarks

codspeed-hq[bot] avatar Jun 24 '24 14:06 codspeed-hq[bot]