[P1][BUG] DB-Connection-Pool nicht konfiguriert (Default 5+10) — Pool-Erschöpfung bei mehreren Nodes #227
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Blockiert das Anbinden weiterer Produktiv-Nodes.
Befund
server/database.py:15:Weder
pool_sizenochmax_overflowgesetzt. SQLAlchemy-Defaults:pool_size=5,max_overflow=10→ maximal 15 gleichzeitige Verbindungen für das gesamte Backend.Auswirkung
Der Verbrauch skaliert mit der Node-Zahl.
websocket/agent_ws.pyöffnet an 12 Stellen eine eigeneAsyncSessionLocal(), überwiegend im Nachrichten-Handler — also pro eingehender Agent-Nachricht. Beiscan_intervalvon 300 s (Default,models/node.py:53) plus Heartbeats, Log-Batches, Task-Updates und Tunnel-Events erzeugt jeder Node dauerhaft Sessions. Dazu die Request-Sessions des Frontends und je 9 Stellen im Scheduler und 8 im Tunnel-Manager.Dass das Limit real trifft, ist im Code dokumentiert —
websocket/manager.py:95:Das wurde damals am Symptom behoben (Session pro Log-Schreibvorgang statt Aufrufer-Session), nicht an der Pool-Dimensionierung. Bei Pool-Erschöpfung liefert das ganze Backend 500er, nicht nur der betroffene Pfad.
Zusätzlich fehlt
pool_recycle— bei einer Firewall oder einem PgBouncer zwischen Backend und DB werden lange offene Verbindungen stillschweigend gekappt;pool_pre_pingerkennt das erst beim Zugriffpool_timeout— Default 30 s; bei Erschöpfung hängen Requests eine halbe Minute, statt schnell zu scheiternPrompt für Claude Code
Definition of Done
pool_recyclegesetztmax_connectionsdokumentiertAus dem Code-Review vom 2026-07-27 (Commit
4152c4d). Gesamtblock: #226, #227, #228, #229, #230, #231.Abarbeitung niedrig → hoch: #231 → #230 → #229 → #228 → #227 → #226.