Wartet der Server mitten im Tick auf eine DB-Antwort oder einen Schreibvorgang, steht das gesamte Spielgeschehen für genau diese Zeit still.
Warum Innerhalb des Ticks wird auf DB-Abfragen und -Speichervorgänge, Log-Schreibvorgänge und externe API-Aufrufe gewartet → Folge Braucht die DB 100 ms, steht auch der Tick 100 ms still → Auf dem Bildschirm Bei jeder Verlangsamung von DB oder Datenträger stockt das ganze Gebiet kurz
Langsame Vorgänge (DB-Abfragen und -Speichervorgänge, Log-Schreibvorgänge, externe API-Aufrufe) vollständig asynchron auslagern und das Ergebnis im nächsten Tick übernehmen (mit nur einem Timeout steht der Tick während der Wartezeit weiterhin still).
Größenordnungen
Selbst ein DB-Round-Trip von 0,5 ms im selben Rechenzentrum summiert sich bei 100 Aufrufen pro Tick auf 50 ms. Das verbraucht allein das komplette Budget eines Servers mit 20 Ticks pro Sekunde.
Im Graphen
Vereinzelte Spitzen ohne Muster · Server-Tick-Zeit, DB-Query-Latenz
Wo nachsehen
Graph der Tick-Zeit, DB-Query-Latenz (slow query log u. a.) und Disk-Latenz auf derselben Zeitachse darstellen. Ohne Tick-Metriken mit bcc offcputime -p ermitteln, wo der Game-Thread wartet
Spricht dafür
Tick-Spitzen fallen zeitlich mit Spitzen der DB- oder Dateilatenz zusammen, und die Wartezeit des Game-Threads entfällt auf Call-Stacks für den Empfang von DB-Antworten oder das Schreiben von Dateien
Spricht dagegen
DB- und Disk-Latenz unauffällig, Tick schlägt trotzdem aus: eher GC-Pause oder Lock-Contention
Prüfmittel
Logs oder Metriken aus Spielserver bzw. Client nötig
ASP.NET Core Best PracticesMicrosoft Datenzugriffe, I/O und langlaufende Operationen asynchron aufrufen, synchron blockierende Aufrufe führen zur Erschöpfung des Thread-Pools und zu verzögerten Antworten