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

Game-Lag-Whitepaper › L12 Datenbank

Locks durch Schemaänderung (DDL) im laufenden Betrieb Schema change lock (DDL / metadata lock)

Ursachen-ID db-ddl-lock · Hauptzuständig DB-Infrastruktur (Infrastrukturteam) · Beteiligt Server-Entwicklung (Entwicklungsteam)

In der interaktiven Fassung mit Grafiken und Experimenten öffnen →

Werden einer Tabelle im laufenden Betrieb Spalten oder Indizes hinzugefügt, kann ein einziger, nur kurz benötigter Lock alle Anfragen auf diese Tabelle warten lassen.

Warum Ein Hotfix fügt einer Tabelle im laufenden Betrieb Spalten oder Indizes hinzu → Folge Die Schemaänderung wartet auf eine zuvor geöffnete lange Transaktion, alle nachfolgenden Anfragen warten auf die Schemaänderung → Auf dem Bildschirm Funktionen, die diese Tabelle nutzen (Inventar, Post usw.), stehen komplett still und laufen in Timeouts

Symptome
Input-Lag, Verschluckte Aktion / Rollback, Kein Login / Endlos-Laden
Faktoren
Stillstand
Wer ist betroffen
Nur eine bestimmte Funktion, Ganzer Server
Wann
Gelegentlich, zufällig, Direkt nach Login oder Wartung
Zuständigkeit
Hauptzuständig DB-Infrastruktur (Infrastrukturteam) · Beteiligt Server-Entwicklung (Entwicklungsteam)
Aufgaben Entwicklungsteam
Hotfixes mit Schemaänderungen zeitlich mit der DB-Infrastruktur abstimmen, zuerst Code ausrollen, der auch ohne die neue Spalte funktioniert.
Aufgaben Infrastrukturteam
Kurzes Lock-Wait-Timeout setzen und bei Fehlschlag wiederholen, nur ausführen, wenn keine langen Transaktionen offen sind, Online-Schema-Change-Tools nutzen, große Tabellen im Wartungsfenster ändern.
Im Graphen
Stufe ab einem bestimmten Zeitpunkt · Auf Locks wartende Sessions, Query-Latenz der betroffenen Tabelle
Wo nachsehen
MySQL: Sessions mit State Waiting for table metadata lock in SHOW PROCESSLIST zählen und mit sys.schema_table_lock_waits die blockierende Session (blocking_pid) finden. PostgreSQL: Anfragen mit granted = false und AccessExclusiveLock in pg_locks prüfen und mit pg_blocking_pids() die blockierende Session finden
Spricht dafür
Ab dem Start der Schemaänderung stauen sich alle Queries auf diese Tabelle im Lock-Warten, ganz vorn steht eine nicht beendete Transaktion oder die Anweisung der Schemaänderung
Spricht dagegen
Wartevorgänge nur bei bestimmten Zeilen, andere Zeilen derselben Tabelle laufen normal: Hot Row (db-hot-row)
Prüfmittel
Mit Infrastruktur-Tools prüfbar (ohne Spielcode)
Mehr dazu
MySQL hält bei Schemaänderungen kurz einen Metadata Lock, PostgreSQL den stärksten Tabellen-Lock. Auch wenn die Änderung selbst sofort erledigt ist: Steht eine nicht beendete Transaktion davor, warten dahinter alle Anfragen.

Quellen

  1. Online DDL Performance and Concurrency MySQL
    Auch Online-DDL braucht zum Abschluss kurz einen exklusiven Metadata Lock; bei langen Transaktionen wartet es, und die wartende Lock-Anfrage blockiert alle nachfolgenden Transaktionen
  2. Server System Variables MySQL
    lock_wait_timeout: Wartelimit für Metadata Locks, Standard 31.536.000 s (1 Jahr)
  3. ALTER TABLE (PostgreSQL Documentation) PostgreSQL
    ALTER TABLE ohne abweichende Angabe holt sich den stärksten Lock ACCESS EXCLUSIVE
  4. Client Connection Defaults (PostgreSQL Documentation) PostgreSQL
    lock_timeout: bricht die Anweisung ab, wenn länger als diese Zeit auf einen Lock gewartet wird
  5. General Thread States MySQL
    Waiting for table metadata lock: Thread-Status beim Warten auf einen Metadata Lock
  6. The schema_table_lock_waits and x$schema_table_lock_waits Views MySQL
    Auf einen Metadata Lock wartende Session (waiting_query) und blockierende Session (blocking_pid)
  7. pg_locks (PostgreSQL Documentation) PostgreSQL
    granted = false: Der Lock wird noch erwartet; mode enthält den Lock-Typ, z. B. AccessExclusiveLock
  8. System Information Functions and Operators (PostgreSQL Documentation) PostgreSQL
    pg_blocking_pids(): Liste der Sessions, die verhindern, dass die angegebene Session einen Lock bekommt

Verwandte Ursachen

Gleiche Schicht: L12 Datenbank

Ursachen aus anderen Schichten mit demselben Symptom (Input-Lag)

Karte in der interaktiven Fassung mit Grafiken und Experimenten ansehen