Synchron vs. Asynchron: Wie Datenbanken die TPS-Stabilität von Gameservern diktieren

Ein technischer Leitfaden über den Einfluss synchroner Datenbankabfragen auf I/O-Engpässe und TPS-Einbrüche bei Gameservern.

01.06.2026 Deutsch

Synchron vs. Asynchron: Wie Datenbanken die TPS-Stabilität von Gameservern diktieren

Wenn ein Multiplayer-Gameserver unter plötzlichen TPS-Einbrüchen (Ticks Per Second) oder kurzen Standbildern leidet, prüfen Administratoren natürlich zuerst die CPU- und RAM-Auslastung. Doch häufig zeigt die Hosting-Telemetrie ein perfektes Bild: Die CPU-Last liegt bei stabilen 30 %, freier Arbeitsspeicher є im Überfluss vorhanden, aber die Spieler klagen weiterhin über Verzögerungen beim Öffnen von Inventaren, ruckelnde Entitäten oder verzögerte Trefferrückmeldungen.

In einer solchen Situation liegt die Ursache direkt an der Schnittstelle zwischen der primären Spielschleife und dem Datenbankmanagementsystem (DBMS). Unoptimierte Abfragestrukturen auf MySQL, PostgreSQL, MongoDB oder SQLite können selbst die stärkste Mehrkern-Hardware lahmlegen. In diesem Artikel führen wir eine technische Analyse durch, wie der Hauptthread des Spiels mit Datenbankschichten interagiert und wie die Festplattenlaufzeiten Ihres Hostings die Gameplay-Flüssigkeit beeinflussen.

1. Der Haupt-Spielthread und die synchrone Falle (I/O-Blockierung)

Wie durch strukturelle Engine-Limits vorgegeben, läuft die Kern-Pipeline der meisten Multiplayer-Gameserver strikt in einem einzigen Hauptthread (Main Thread). Diese Schleife verarbeitet Spielskripte sequentiell unter einem festen Zeitfenster pro Frame – zum Beispiel exakt 20 Millisekunden für ein stabiles 50-TPS-Szenario in Minecraft oder 33,3 Millisekunden für einen 30-TPS-Ceiling in Rust.

Sobald ein Entwickler eine synchrone (blockierende) Datenbankabfrage implementiert, friert der Hauptthread ein. Betrachten wir den Ablauf, wenn ein Spieler verbindet und das Skript einen synchronen Datensatz abruft:

  1. Der Hauptthread erreicht die Zeile: LoadPlayerData(playerID);.
  2. Der Server stoppt augenblicklich sämtliche aktiven Welt-Simulationsschleifen. Das Frame-Zeitfenster läuft jedoch weiter.
  3. Die Engine sendet das Abfragepaket an die externe Datenbankinstanz (z. B. MySQL) und versetzt den Hauptthread in einen Wartezustand.
  4. Die Datenbank empfängt den Befehl, führt einen physischen Lesevorgang auf dem Speicherarray des Hostings aus, sucht die Zeile, stellt die Daten zusammen und sendet die Antwort zurück.
  5. Erst nach Erhalt dieser Payload wacht der Hauptthread wieder auf und setzt die Welt-Simulation fort.

Wenn dieser Lesevorgang 50 Millisekunden beansprucht (aufgrund fehlender Indizes oder langsamer Festplattenleistung), verlängert sich der aktuelle Server-Frame von 20 ms auf massive 70 ms. Der Server lässt Ticks aus, und die Spieler erleben ein deutliches Standbild (Stutter).

2. Der I/O-Bottleneck: Warum die CPU schläft, während der Server laggt

Der Begriff I/O-Bottleneck (Eingabe-/Ausgabe-Engpass) beschreibt einen Zustand, in dem die Gesamtleistung eines Systems ausschließlich durch die Lese-/Schreibgeschwindigkeit des Datenspeichers (SSD/HDD) limitiert wird.

Wenn ein Gameserver blockierende synchrone Befehle ausführt, leistet die Hosting-CPU keine komplexe Arbeit – sie befindet sich lediglich in einem Wartezustand, der technisch als iowait klassifiziert wird. Genau aus diesem Grund zeigt Ihr Hosting-Panel während der Lags eine niedrige CPU-Last an. Der Prozessor wäre bereit, є aber durch die E/A-Latenz der Festplatte blockiert.

Wenn 100 Spieler aktiv sind und das Skript bei jedem Item-Wechsel oder Kill synchrone UPDATE-Abfragen anweist, gerät das Speicherarray unter massiven IOPS-Stress (Input/Output Operations Per Second). Die Abfragen stauen sich in einer riesigen Warteschlange, die Verarbeitungszeit wächst exponentiell und der Server verfällt in eine tiefe Starre.

3. Asynchrone Ausführung: Parallele Rechenkanäle

Um den Haupt-Spielthread von Festplattenlatenzen zu befreien, nutzen moderne Architekturen asynchrone (nicht-blockierende) Datenbanktransaktionen. Bei diesem Ansatz sendet die Spielschleife Befehle ab, ohne auf eine direkte Antwort der Datenbank zu warten.

Der asynchrone Ablauf funktioniert auf einem grundlegend veränderten Modell:

  1. Der Hauptthread ruft einen asynchronen Befehl auf (wie mysql_tquery in SA:MP oder Hintergrund-Tasks in C#/Java).
  2. Der Hauptthread delegiert das Paket sofort an eine Hintergrund-Pipeline и setzt die Spielsimulation direkt fort (Physik wird berechnet, Spieler bewegen sich, die TPS bleiben stabil).
  3. Die Abfrage wird von einem dedizierten Hintergrund-Thread (Worker Thread) übernommen, der auf einem ungenutzten CPU-Kern läuft. Dieser kümmert sich um die gesamte Kommunikation mit der Datenbank und der Festplatte.
  4. Sobald die Daten bereitstehen, signalisiert der Worker-Thread dem Hauptthread das Ergebnis und gibt es über einen sogenannten Callback zurück. Erst jetzt weist der Hauptthread dem Spieler sicher seine Gegenstände zu.

4. Wie verschiedene DBMS die Serverlogik beeinflussen

Die Wahl Ihrer Datenbankstruktur auf dem Hoster bestimmt die Transaktionsgrenzen, auf die Ihre Software-Ebenen stoßen werden.

MySQL und PostgreSQL (Relationale Datenbanksysteme)

Relationale Systeme eignen sich perfekt für strikt strukturierte Datensätze (Accounts, Logins, Spenden-Logs). Sie erfordern zwingend das Einrichten von Datenbankindizes auf häufig genutzten Suchspalten (z. B. Filterung nach Benutzername oder eindeutigen IDs). Ohne Indizes muss eine relationale Datenbank bei jeder Abfrage die gesamte Tabelle von oben bis unten durchsuchen, was sofort zu einem I/O-Bottleneck führt.

MongoDB (Dokumentenorientierte NoSQL-Datenbank)

MongoDB speichert Daten in flexiblen, JSON-ähnlichen Dokumenten. Dieses Design є ideal für komplexe, sich dynamisch verändernde Systeme – wie ein tief verschachteltes Multiplayer-Inventar, bei dem Gegenstände variierende Haltbarkeitswerte oder Modifikationen besitzen. MongoDB skaliert parallele Transaktionen hocheffizient und arbeitet primär über RAM-Caches, erfordert jedoch ein sorgfältiges Cache-Management.

SQLite (Lokale Datei-Datenbank)

Eine SQLite-Datenbank speichert ihr gesamtes Schema in einer einzigen Datei direkt im Mod-Verzeichnis. SQLite є der Hauptgrund für massive TPS-Einbrüche auf gut besuchten Servern. Die Architektur bedingt, dass bei jedem Schreibvorgang die gesamte Datenbankdatei komplett gesperrt wird. Wenn zwei Spieler in demselben Tick versuchen, ihren Fortschritt zu speichern, muss der zweite Thread warten, bis der erste Vorgang abgeschlossen є, was kaskadierende Verzögerungen im Frame-Budget verursacht.

Datenbank-Typ Sperrmodus für Festplattendateien Skalierbarkeit für High-Load-Projekte
MySQL / PostgreSQL Sperrung auf Zeilenebene (Nur die betroffene Account-Zeile wird blockiert; alle anderen Zeilen bleiben für gleichzeitige Zugriffe offen). Hoch (Bedingt asynchronen Code und saubere Indizes)
MongoDB Sperrung auf Dokumentenebene (Erreicht extremen parallelen Durchsatz durch intensive Pufferspeicherung im RAM-Cache). Hoch (Ideal für variable Inventare und Crafting-Systeme)
SQLite Sperrung auf Dateiebene (Ein einzelner aktiver Schreibvorgang blockiert sämtliche Lese-/Schreibzugriffe). Niedrig (Beschränkt auf Testumgebungen oder kleine Server bis maximal 15–20 Slots)

Fazit

Die Stabilität der Server-TPS hängt nicht nur von der CPU-Rechenleistung ab, sondern vor allem davon, wie effizient blockierende Aufgaben delegiert werden. Die Strukturierung von Datenbankinteraktionen erfordert das vollständige Eliminieren synchroner blockierender Abfragen aus dem Haupt-Spielloop. Überlassen Sie dem primären Thread das Verarbeiten von Spieler-Vektoren, Physik und PVP-Raycasts – und lagern Sie die schwere Last der Lese-/Schreibzugriffe komplett auf asynchrone Hintergrund-Threads aus, die von den schnellen NVMe-Speicherarrays Ihres Hoster-Knotens gestützt werden.

Ähnliche Artikel

Virtualisierung und Ressourcenlimits: Was passiert, wenn Ihr Server die Hosting-Limits überschreitet

Ein tiefgehender technischer Überblick über Containerisierung und Linux cgroups, der CPU-Throttling, den Completely Fair Scheduler (CFS) und den Noisy-Neighbor-Effekt auf Gameservern erklärt.

Weiterlesen

Speicherlecks unter dem Mikroskop: Was im RAM passiert, wenn ein Server zu lange läuft

Ein technischer Leitfaden zur Speicherverwaltung von Game-Servern, der den Unterschied zwischen Stack und Heap, die Grenzen der Garbage Collection und die Ursachen von OOM-Abstürzen erklärt.

Weiterlesen

Der Multithreading-Mythos: Wie die CPU-Kernanzahl Game-Server beeinflusst

Ein technischer Leitfaden zur Single-Thread-Limitierung von Game-Servern. Erfahren Sie, warum die Single-Core-Leistung und Taktfrequenz wichtiger sind als viele Kerne.

Weiterlesen