Skip to main content

Connection Pooling

Vercel menggunakan serverless functions — setiap request bisa membuat koneksi database baru. Tanpa pooling, ini bisa menyebabkan terlalu banyak koneksi ke database. PlanetScale sudah menyediakan PgBouncer (connection pooler) secara bawaan. Kamu cukup menggunakan URL yang tepat.

Kenapa Perlu Connection Pooling?

Tanpa Pooling:
  Request 1 → buka koneksi baru → selesai → tutup
  Request 2 → buka koneksi baru → selesai → tutup
  Request 3 → buka koneksi baru → selesai → tutup
  ↑ Boros, bisa melebihi batas koneksi

Dengan PgBouncer:
  Request 1,2,3 → PgBouncer → pakai koneksi yang sudah ada
  ↑ Efisien, hemat resource

Cara Menggunakan Pooled Connection

Tambahkan ?pgbouncer=true ke connection string:
# Direct (untuk migrations/studio)
DATABASE_URL="postgresql://role:pass@host/db?sslmode=require"

# Pooled (untuk production Vercel)
DATABASE_URL="postgresql://role:pass@host/db?sslmode=require&pgbouncer=true"

Rekomendasi untuk Project Cekolah

EnvironmentTipe ConnectionAlasan
Vercel ProductionPooledServerless, banyak request concurrent
Vercel PreviewPooledSama seperti production
Development lokalDirectbun dev punya koneksi persistent
MigrationsDirectPgBouncer tidak support prepared statements yang dibutuhkan migrations
Drizzle StudioDirectButuh koneksi langsung
Jangan gunakan pooled connection untuk bun run db:migrate. Drizzle migrations tidak kompatibel dengan PgBouncer dalam mode transaction pooling.

Tips

  • PlanetScale plan gratis memiliki batas koneksi. Selalu gunakan pooled connection di production.
  • Batas koneksi Drizzle di project ini: 2 untuk production, 10 untuk development.
  • Jika dapat error too many connections, periksa apakah kamu menggunakan pooled URL.