Nâng CaoDatabase iconDatabase

Connection pooling trong database là gì? Tại sao quan trọng?

Connection pooling duy trì pool of reusable database connections thay vì tạo connection mới cho mỗi request.

  • Tạo connection tốn 20-100ms (TCP handshake, SSL negotiation, auth, session setup) — với 1000 requests/s việc tạo new connection mỗi lần là catastrophic.
  • PgBouncer: connection pooler phổ biến nhất cho PostgreSQL, đứng giữa app và DB, hỗ trợ 3 modes: Session (connection held for entire client session), Transaction (connection returned to pool after each transaction — recommended), Statement (per-statement, most aggressive nhưng không support multi-statement transactions).
  • Pool sizing formula: connections = (core_count 2) + effective_spindle_count — ví dụ server 4 cores với SSD: 42+1 = 9 connections; lớn hơn không phải lúc nào cũng tốt hơn vì context switching overhead.
  • Prisma connection pool: DATABASE_URL='postgresql://...?connection_limit=10&pool_timeout=20' — connection_limit per Prisma instance.
  • Serverless challenges: mỗi Lambda/Edge function có pool riêng — với 1000 concurrent invocations = 1000 * pool_size connections đến DB, vượt quá PostgreSQL max_connections (default 100).
  • Giải quyết: PgBouncer ở transaction mode, Prisma Accelerate (managed connection pooling), Neon serverless driver với HTTP-based connections không cần persistent TCP.

Xem toàn bộ Database cùng filter theo level & chủ đề con.

Mở danh sách Database