Laufen Ranglistenberechnung, Massenversand von Ingame-Post oder das Aufräumen alter Daten im laufenden Betrieb, belegen sie Locks und Datenträger.
Warum Massenjob läuft während der Betriebszeit → Folge Locks über große Bereiche, Datenträger und CPU belegt → Auf dem Bildschirm Handel und Speichern schlagen zu bestimmten Zeiten fehl, Laden verzögert
In kleine Portionen aufteilen und schrittweise abarbeiten, Aggregationen auf dem Replikat ausführen.
Aufgaben Infrastrukturteam
Replikat für Aggregationen bereitstellen, Batch-Jobs in ruhige Zeiten legen, Wartevorgänge durch Lock-Eskalation und Gap-Locks überwachen.
Im Graphen
Spitzen in festen Abständen · DB-Query-Latenz, Lock-Wartevorgänge
Wo nachsehen
Lange Queries suchen, die zum Zeitpunkt des Lags liefen. MySQL: slow query log, PostgreSQL: query_start und query in pg_stat_activity prüfen und mit den Lock-Wartemetriken zur selben Zeit sowie dem Batch-Zeitplan (Cron, Event Scheduler der DB) abgleichen. SQL Server: Lock-Eskalation mit dem Extended Event lock_escalation protokollieren
Spricht dafür
Jedes Mal zur selben Uhrzeit laufen große UPDATE-, DELETE- oder Aggregations-Queries, währenddessen steigen Lock-Wartevorgänge und Disk-Auslastung gemeinsam
Spricht dagegen
Keine langen Queries zu diesem Zeitpunkt: Checkpoint (db-checkpoint) oder Server-Backup (dk-backup)
Prüfmittel
Mit Infrastruktur-Tools prüfbar (ohne Spielcode)
Mehr dazu
SQL Server wandelt Zeilensperren in eine Tabellensperre um, wenn eine Anweisung mehr als etwa 5.000 davon hält (Lock-Eskalation). In diesem Moment stehen alle Anfragen auf dieselbe Tabelle still. Auch MySQL sperrt in der Standardeinstellung bei Änderungen über Bereichsbedingungen die Lücken zwischen den Zeilen mit (Gap-Lock) und verhindert so das Einfügen neuer Zeilen.
Quellen
Transaction Locking and Row Versioning GuideMicrosoft SQL Server Hält eine Anweisung auf einer Tabelle (oder einem Index) mindestens 5.000 Locks, folgt eine Lock-Eskalation, protokollierbar mit dem Extended Event lock_escalation
InnoDB LockingMySQL Unter der InnoDB-Standard-Isolationsstufe REPEATABLE READ nutzen Suchen und Scans Next-Key-Locks; Gap-Locks verhindern dabei das Einfügen neuer Zeilen in die Lücke
The Slow Query LogMySQL Protokolliert Queries über long_query_time mit Ausführungszeit (Query_time), Lock-Zeit (Lock_time) und gelesenen Zeilen