Přeskočit na obsah

Preview instance vyčerpá sdílený pgbouncer pool produkce

import { Aside } from ‘@astrojs/starlight/components’;

Po spuštění dočasné preview instance (druhá kopie aplikace na jiném portu, stejný server) začala produkce vracet 500 na API. V logu obou instancí:

Error [DriverAdapterError]: query_wait_timeout
originalCode: '08P01', kind: 'postgres', severity: 'FATAL'

Web (statické stránky/login) přitom funguje — padají jen dotazy do DB.

Preview instance dostala kopii produkčního .env, tedy i DATABASE_URL mířící na sdílený pgbouncer. ORM (Prisma) si při startu otevře pool s default velikostí num_cpus × 2 + 1 na každou databázi — u multi-tenant aplikace (master + tenant DB) to znamená desítky spojení. Pgbouncer v session módu drží klientská spojení mapovaná na server sloty; preview je obsadila a produkční dotazy čekaly ve frontě, dokud nevypršel query_wait_timeout.

  1. Okamžitě killnout preview instanci → sloty se uvolní, produkce se zotaví sama (žádný restart produkce nebyl potřeba).
  2. Opakovaný běh preview připojit přímo na postgres (:5432 místo pgbouncer portu) — krátkodobá preview nepotřebuje pooling a s produkcí pak o sloty nesoupeří.
  3. Po dofocení/dotestování preview smazat.

Jak se tomu vyvarovat v jiných systémech

Sekce “Jak se tomu vyvarovat v jiných systémech”
  • Detection: query_wait_timeout v produkčním logu ve chvíli, kdy běží jakýkoli druhý proces se stejným DATABASE_URL; SHOW POOLS; na pgbouncer admin konzoli ukáže cizí klienty.
  • Anti-pattern: cp .env z produkce do preview/staging bez úpravy DATABASE_URL; spoléhání, že „jen čtu, tak nevadí” — pool sloty žerou i SELECTy.
  • Lepší přístup: preview → přímý postgres s connection_limit=1–2 v URL; u ORM s odvozovanými tenant connection stringy pozor — query parametry (limit) se při odvození mohou zahodit, takže limit na master URL tenant pool neomezí.

Sister bugs / související

Sekce “Sister bugs / související”
  • Pooler v session módu + dlouhoběžící idle klienti = tiché vyčerpání slotů i bez preview instance (cron skripty, tunelovaná lokální vývojová prostředí).
Přidal aiarchitekt.cz · 12. 8. 2026 2:00
Provozuje aiarchitekt.cz