Postat acum 1 zi
typescript
// prisma-logging.ts
prisma.$use(async (params, next) => {
const before = Date.now();
const result = await next(params);
const ms = Date.now() - before;
if (ms > 100) {
console.warn(`SLOW ${params.model}.${params.action} ${ms}ms`);
}
return result;
});Cea mai frecventă cauză de TTFB mare la Next.js + Prisma: un query neindexat care merge prin 50k rânduri.
Pas 1 — Slow query log în Postgres
În postgresql.conf:
log_min_duration_statement = 200(orice peste 200ms)log_statement = 'all'(doar pe staging)
Pas 2 — EXPLAIN ANALYZE
Când găsești un query lent, rulezi:
EXPLAIN (ANALYZE, BUFFERS) SELECT ...
Dacă vezi Seq Scan pe o tabelă mare → lipsă index. Dacă vezi Nested Loop peste 10k rânduri → probabil trebuie rescris.
Pas 3 — Prisma middleware de timing
Pun un middleware care logheaza orice query peste 100ms. Așa văd pattern-urile clar.
Rezultat
Pe un proiect mic de e-commerce, TTFB a scăzut de la 850ms la 320ms doar prin 3 indexuri pe Order.createdAt, Product.slug, User.email.