Die Zahl der Verbindungen zur DB ist fest. Belegen langsame Queries die Verbindungen, müssen alle anderen Anfragen warten.
Warum Durch langsame Queries oder eine Flut von Anfragen sind alle Verbindungen belegt → Folge Neue Anfragen warten, bis eine Verbindung frei wird → Auf dem Bildschirm Endlos-Laden beim Login, verzögertes Speichern, Timeouts
Langsame Queries beseitigen, Pool-Größe und Warte-Timeout anpassen (Pool nicht pauschal vergrößern), getrennte Pools je Funktion einrichten.
Aufgaben Infrastrukturteam
Maximale Verbindungszahl der DB sowie CPU- und IOPS-Reserven prüfen, vor Skalierung oder Autoscaling prüfen, ob Serveranzahl × Pool-Größe innerhalb der maximalen Verbindungszahl bleibt, Metriken für Verbindungs- und Lock-Wartezeiten ins Monitoring aufnehmen.
Größenordnungen
Die nötige Zahl an Verbindungen lässt sich mit „Anfragen pro Sekunde × Zeit, die eine Anfrage eine Verbindung belegt“ abschätzen. Bei 2.000 Anfragen pro Sekunde und 5 ms pro Anfrage sind im Mittel ständig 10 Verbindungen beschäftigt. Für Lastspitzen plant man üblicherweise das Zwei- bis Dreifache ein. Wird die Query auf 150 ms langsamer, braucht dieselbe Last 300 Verbindungen.
Im Graphen
Plateau am Limit · Belegte DB-Verbindungen, Wartezeit auf Verbindungen
Wo nachsehen
Auf DB-Seite den Verbindungsstatus je Spielserver zählen. MySQL: Host, Command (untätige Verbindungen: Sleep) und Time aus SHOW PROCESSLIST sowie Threads_connected, Threads_running und die Zahl abgewiesener Verbindungen Connection_errors_max_connections prüfen. PostgreSQL: pg_stat_activity nach client_addr und state gruppiert zählen. Liefert die Connection-Pool-Bibliothek des Spielservers Anzahl und Dauer der Wartevorgänge, diese ebenfalls prüfen
Spricht dafür
Alle Verbindungen eines Spielservers (so viele, wie der Pool groß ist) führen Queries aus, keine Verbindung ist frei, währenddessen warten Login und Speichern. Oder die Gesamtzahl der DB-Verbindungen erreicht max_connections, und neue Verbindungen werden abgewiesen
Spricht dagegen
Genug freie Verbindungen, trotzdem langsam: Latenz der Queries selbst (db-no-index, db-hot-row) oder ausgelastete DB-Ressourcen
Prüfmittel
Mit Infrastruktur-Tools prüfbar (ohne Spielcode)
Mehr dazu
Ein pauschal vergrößerter Pool erhöht nur die CPU-Last der DB und die Lock-Contention, und alle werden gemeinsam langsamer. Übersteigt außerdem Serveranzahl × Pool-Größe die maximale Verbindungszahl der DB, bekommen neu hinzugefügte oder neu gestartete Server nicht einmal eine Verbindung. Das passiert häufig direkt nach Autoscaling oder Wartung.
Quellen
Number Of Database ConnectionsPostgreSQL Sind die DB-Ressourcen ausgeschöpft, sinkt der Durchsatz durch weitere Verbindungen sogar; aktive Verbindungen an die Ressourcen anzupassen und den Rest in eine Warteschlange zu stellen, verbessert Latenz und Durchsatz
Too many connectionsMySQL Sind alle max_connections belegt, werden neue Verbindungen mit dem Fehler Too many connections abgewiesen
Server Status VariablesMySQL Threads_connected und Threads_running, Connection_errors_max_connections (wegen Erreichen von max_connections abgewiesene Verbindungen)