한국어English日本語简体中文繁體中文DeutschไทยTiếng ViệtРусскийPortuguês (Brasil)EspañolBahasa Indonesia

Game-Lag-Whitepaper › Probleme, die nur einige betreffen

Aufgeblähte Daten eines bestimmten Charakters One character with oversized data (inventory, mail, buffs)

Ursachen-ID pt-heavy-char · Hauptzuständig Server-Entwicklung (Entwicklungsteam) · Beteiligt DB-Infrastruktur (Infrastrukturteam)

In der interaktiven Fassung mit Grafiken und Experimenten öffnen →

Bei einem Charakter mit Tausenden Items oder Postnachrichten, ungewöhnlich langen Freundes- oder Blocklisten oder sehr vielen Buffs ist die Datenmenge beim Login, beim Speichern und beim Melden an die Umgebung um ein Vielfaches größer als bei anderen. Unabhängig von der Leitung ist es nur mit diesem Charakter langsam.

Warum Lange gespielter Charakter oder Event-Belohnungen: Tausende Einträge in Inventar und Postfach → Folge Bei jedem Login, Gebietswechsel und Speichern entsprechend viele DB-Lese- und Schreibvorgänge, auch die an die Umgebung zu sendenden Ausrüstungs- und Buff-Daten sind groß → Auf dem Bildschirm Nur dieser Charakter hat lange Ladezeiten beim Betreten und stockt beim Öffnen von Inventar oder Postfach. Wartet der Server im Game-Thread auf das Speichern, stehen auch Spieler in der Umgebung kurz still

Symptome
Kein Login / Endlos-Laden, Input-Lag, Freeze
Faktoren
Stillstand
Wer ist betroffen
Nur ich, Nur eine bestimmte Funktion
Wann
Direkt nach Login oder Wartung, Bei bestimmten Aktionen, Beim Bewegen oder Zonenwechsel
Zuständigkeit
Hauptzuständig Server-Entwicklung (Entwicklungsteam) · Beteiligt DB-Infrastruktur (Infrastrukturteam)
Aufgaben Entwicklungsteam
Obergrenzen für Inventar und Postfach mit automatischem Aufräumen alter Post, nur benötigte Teile nachladen, nur Änderungen und außerhalb des Game-Threads speichern.
Aufgaben Infrastrukturteam
Im Slow-Query-Log wiederholte langsame Abfragen zum selben Charakter finden und an das Entwicklungsteam weitergeben, Top-Liste der Charaktere mit den meisten Item- und Postzeilen bereitstellen.
Größenordnungen
Ist jedes Item eine Zeile in der DB, liest ein Charakter mit 5.000 Items bei jedem Login 5.000 Zeilen. Das ist das Zigfache eines normalen Charakters.
Im Graphen
Nur einzelne Ausreißer · Login- und Speicherzeit pro Charakter, gelesene DB-Zeilen pro Charakter
Wo nachsehen
Im Slow-Query-Log der DB (MySQL slow query log, PostgreSQL log_min_duration_statement) wiederholte langsame Abfragen und Speichervorgänge mit derselben Charakter-ID suchen und eine Top-Liste der Zeilenzahl pro Charakter in den Item- und Posttabellen erstellen
Spricht dafür
Langsame Queries häufen sich bei wenigen Charakter-IDs, deren Item- und Postzeilen das Zigfache des Durchschnitts betragen, und auch von einem anderen PC und über eine andere Leitung ist es genauso langsam
Spricht dagegen
Auch andere Charaktere desselben Accounts oder andere Spieler sind langsam: DB-Hardware oder Locks. Derselbe Charakter läuft auf einem anderen PC normal: Umgebung des Spielers
Prüfmittel
Mit Infrastruktur-Tools prüfbar (ohne Spielcode)
Mehr dazu
Ist derselbe Charakter auch von einem anderen PC und über eine andere Leitung genauso langsam, während andere Charaktere desselben Accounts normal laufen, stehen die Charakterdaten unter Verdacht. Deshalb gehört der Charaktername unbedingt in jede Meldung.

Quellen

  1. Extraneous Fetching antipattern Microsoft Azure
    Werden mehr Daten als nötig abgerufen, steigt die I/O-Last und die Antworten werden langsamer
  2. PostgreSQL Documentation: Error Reporting and Logging PostgreSQL
    log_min_duration_statement: protokolliert SQL-Anweisungen ab einer bestimmten Dauer, um langsame Queries zu verfolgen
  3. The Slow Query Log MySQL
    Slow-Query-Log, das Queries über long_query_time protokolliert

Verwandte Ursachen

Gleiche Schicht: Probleme, die nur einige betreffen

Ursachen aus anderen Schichten mit demselben Symptom (Kein Login / Endlos-Laden)

Karte in der interaktiven Fassung mit Grafiken und Experimenten ansehen