Die Startseite brauchte 25 Sekunden — und niemand hatte es mir gesagt
Ein Spieler schrieb mir, die Startseite lade ewig. Ich habe nachgemessen und bin ziemlich blass geworden: fast 25 Sekunden, bis der Server überhaupt antwortete. Das war der Anfang von zwei Tagen unter der Haube — mit einem Fund, der deutlich unangenehmer war als die Ladezeit selbst.
⚡ 25 Sekunden für eine einzige Seite
- Die Ursache war weder exotisch noch clever. Die Startseite berechnete bei jedem einzelnen Aufruf sämtliche ligaweiten Statistiken komplett neu — für jeden Besucher, jedes Mal aufs Neue.
- Solange es wenige Spielstände gab, fiel das nicht auf. Mit jedem neuen Spielstand wurde die Rechnung größer. Am Ende reichte sie für eine halbe Minute Wartezeit.
- Diese Werte werden jetzt einmal vorbereitet statt bei jedem Besuch neu ermittelt. Die Startseite antwortet seitdem in Bruchteilen einer Sekunde.
🔍 Warum es zwei Wochen niemand gemeldet hat
- Das ist der Teil, der mich mehr beschäftigt als die Ladezeit: Der Zustand bestand vermutlich seit Wochen. Gemeldet hat ihn eine einzige Person.
- Die meisten schließen den Tab und kommen nicht wieder. Fehlermeldungen bekomme ich, Langsamkeit meldet fast niemand.
- Deshalb gibt es jetzt eine automatische Überwachung: Das Spiel misst selbst, wie lange jede Seite braucht, und meldet mir Ausreißer — ohne dass jemand ein Ticket schreiben muss.
🧹 Sechs Millionen Zeilen, die es nicht geben dürfte
- Beim Aufräumen der Datenbank stieß ich auf über sechs Millionen Zeilen, die zu Spielständen gehörten, die es längst nicht mehr gibt.
- Der Grund war ein Fehler von mir, und zwar kein kleiner: Die Funktion „Spielstand löschen“ räumte 19 von 28 Tabellen ab. Nicht dabei war ausgerechnet die größte — die Einzelspieler-Statistiken pro Match.
- Jeder gelöschte Spielstand ließ seine komplette Match-Historie zurück. Und weil danach der Spielstand fehlte, fand auch die nächtliche Aufräum-Routine diese Reste nie wieder.
🗄️ Was jetzt anders ist
- Die Löschfunktion liest die Tabellenliste inzwischen selbst aus der Datenbank, statt einer Liste zu folgen, die ich pflegen muss. Sie kann damit nicht mehr veralten.
- Zusätzlich räumt die nächtliche Routine jetzt auch Altlasten ab — Reste, für die es keinen Spielstand mehr gibt.
- Die größte Tabelle schrumpfte von rund 20 auf gut 9 Millionen Zeilen, etwa 1,8 GB gingen an den Server zurück.
- Für dich merkbar ist das vor allem indirekt: Eine kleinere Datenbank ist eine schnellere Datenbank.
Zwei Tage Arbeit ohne ein einziges neues Feature — und trotzdem die sinnvollste Zeit seit Langem. Falls dir eine Seite zäh vorkommt: Schreib mir das ruhig. Ich sehe inzwischen zwar vieles selbst, aber längst nicht alles.