EMZETT.
Login

Optimistisches und pessimistisches Sperren

Kurz: Beim pessimistischen Sperren sperrt man Daten vor dem Ändern, beim optimistischen prüft man erst beim Speichern, ob jemand dazwischen etwas geändert hat.

Genauer: Beide Verfahren verhindern „verlorene Aktualisierungen”, bei denen zwei Personen denselben Datensatz bearbeiten und die zweite Speicherung die erste überschreibt.

Im Detail

  • Pessimistisch: SELECT ... FOR UPDATE sperrt die Zeile, bis die Transaktion endet. Sicher bei hohem Konflikt, aber andere müssen warten, und es drohen Verklemmungen (Deadlocks).
  • Optimistisch: Die Zeile hat eine Versionsnummer (oder Zeitstempel). Beim Speichern: UPDATE ... SET ..., version = version + 1 WHERE id = ? AND version = ?. Wurden 0 Zeilen geändert, hat jemand anders gespeichert, und man muss neu laden oder zusammenführen.
  • Web: Der Nutzer liest ein Formular und speichert Minuten später. Lange Sperren sind unpraktikabel, daher ist optimistisch üblich (ETag und If-Match bei HTTP).
  • Wahl: Selten Konflikte → optimistisch, häufige Konflikte auf denselben Daten (Lagerbestand, Kontostand) → pessimistisch oder atomare Updates (SET bestand = bestand - 1).
  • Zusammenhang: Siehe MVCC und Isolationsstufen.

Siehe auch: Transaktionen und ACID