Repository navigation
feat: pgbouncer (session) przed PostgreSQL dla appservera - #35
Merged
Merged
Conversation
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… logi) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…er; poprawki z 2. review Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…puli) + test na zywo Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…thy), testy statyczne + CI Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…y w CLAUDE.md Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…s timeout, netdata w tescie, docs - ulimits.nofile 4096 w compose: domyslny soft limit zalezy od daemona (czesto 1024), a pgbouncer przy max_client_conn=1000 potrzebuje ~1174 - test-pgbouncer: z_limitem (bash) zamiast timeout — na stockowym macOS brak timeout dawal falszywe OK w 7b i falszywy BLAD w 7 - test statyczny: netdata na liscie serwisow laczacych sie bezposrednio - docs: komentarz trybu bazy zewnetrznej, healthcheck pgbouncera, PGBOUNCER_CPU_LIMIT nie jest liczony przez configure-resources Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Po co
Django w appserverze (
CONN_MAX_AGE=0, ASGI) otwiera nowe połączenie z PostgreSQL przy każdym żądaniu. Pomiar na publikacje.up.lublin.pl (27.09.2026, z kontenera appservera, mediany z 30 prób): połączenie 18 ms + pierwsze zapytanie na świeżym procesie 9,7 ms (zimny cache katalogu) vs 1,5 ms na rozgrzanym — przy medianie całego żądania 100 ms.pgbouncer w trybie
sessiontrzyma gotowe, rozgrzane procesy bazy. Znika fork backendu i zimny cache; zostaje tańsze logowanie SCRAM do samego pgbouncera. Szacunek:connect+ pierwsze zapytanie z ~28 ms do rzędu 3–8 ms — do potwierdzenia pomiarem po wdrożeniu (kryterium: ≥ 3× szybciej, medianarequest_timenie rośnie).To nie jest ochrona przed floodem (tę daje #34 + iplweb/bpp#833).
Co się zmienia
pgbouncer(docker-compose.pgbouncer.yml,edoburu/pgbouncer:v1.25.2-p0) z własnym skryptem startowympgbouncer/entrypoint.sh— obrazowy wpisuje hasło bez escapowania ("/%psują logowanie)DJANGO_BPP_DB_HOST: ${BPP_APPSERVER_DB_HOST:-pgbouncer}, port 6432); authserver, Celery, denorm-queue (LISTEN), netdata, backup — bezpośrednio jak dotąddbserveri bazy zewnętrznej — pgbouncer łączy się zDJANGO_BPP_DB_HOST/_PORTpool_mode = sessionna sztywno (transactionłamieWITH HOLDcursory Django,LISTEN,SET)auth_filez.env), zero migracji.env, domyślnie włączoneservice_healthy, jak dodbserver<baza>_healthzpool_size=1— nie robi sięunhealthypod pełną puląmax_connections − max(40, 20 + 0,75×rdzenie)z ostrzeżeniem;query_wait_timeout=15,max_client_conn=1000,ulimits.nofile=4096, logowanie połączeń wyłączone,SHOW POOLSprzezstats_usersmake configure-resourceszna pgbouncera; docs: nowadocs/konfiguracja/pgbouncer.md+ usługi, limity, healthchecki, komendy, CLAUDE.mdSpec:
docs/superpowers/specs/2026-09-27-pgbouncer-design.md(2 rundy review) · Plan:docs/superpowers/plans/2026-09-27-pgbouncer.mdTesty (lokalnie)
make test-pgbouncer(prawdziwy PostgreSQL 18 + nasz skrypt): 25/25 — hasłop"a%s$ w\x, izolacja i reset sesji między klientami, ten sam proces bazy dla kolejnych połączeń, sonda przy pełnej puli, przycięcie przymax_connections=50, baza niedostępna przy starcie, brak wymaganej zmiennej. 4/4 mutacje wykryte (brak escapowania,transaction, pustyserver_reset_query, sonda przez główną pulę). W CI oboktest-nginx-limits.tests/test_makefile.sh: 295 pass; nowy test na wyrenderowanymdocker compose configze starym.env(tylko appserver przez pulę, reszta bezpośrednio — mutacja netdata→pgbouncer wykryta). 1 FAIL tylko lokalnie (pozostałość w moim repo-lokalnym.env), nie na CI.test-waf82/82,test-nginx-limitszielony, shellcheck czysty,mkdocs build --strictOKulimits), docs-sync poprawionePo merge'u, przed wdrożeniem na publikacje.up.lublin.pl
Posprzątać zdublowane
DJANGO_BPP_DB_*w tamtejszym.env; pomiar przed/po.🤖 Generated with Claude Code