introtext

Die Isolationsebene (englisch isolation level) einer Datenbank-Transaktion legt fest, wie stark eine Transaktion von gleichzeitig laufenden anderen Transaktionen abgeschirmt wird. Sie ist der I-Teil des ACID-Prinzips: Je höher die Isolation, desto korrekter das Ergebnis — aber desto mehr Sperren, Snapshot-Verwaltung und Wartezeiten sind nötig. Jede Anwendung wählt deshalb einen Kompromiss zwischen Konsistenz und Parallelität.

Die vier Stufen nach ANSI SQL-92

Der SQL-Standard ANSI SQL-92 (ISO/IEC 9075:1992) definiert vier Isolationsebenen. Sie werden über die Anomalien beschrieben, die sie verbieten:

  • READ UNCOMMITTED: verbietet keine der klassischen Anomalien — höchste Parallelität, niedrigste Sicherheit.
  • READ COMMITTED: verbietet den Dirty Read — die Standardwahl vieler Systeme (PostgreSQL, Oracle).
  • REPEATABLE READ: verbietet zusätzlich den Non-Repeatable Read — stabile Sicht innerhalb einer Transaktion; Phantom Reads sind laut Standard noch erlaubt (MySQL InnoDB geht mit Gap-Locks darüber hinaus).
  • SERIALIZABLE: verbietet auch den Phantom Read — das Ergebnis entspricht einer seriellen Ausführung der Transaktionen.

Welche Anomalien gibt es?

Die drei klassischen Anomalien der ANSI-Liste sind der Dirty Read (Lesen unbestätigter Daten), der Non-Repeatable Read (unterschiedliche Werte bei wiederholtem Lesen derselben Zeile) und der Phantom Read (unterschiedliche Zeilensätze bei wiederholten Bereichsabfragen). Hinzu kommen zwei weitere, die der Standard übersehen hat: der Lost Update und der Write Skew.

Kritik am Standard

Hal Berenson, Phil Bernstein, Jim Gray, Jim Melton, Elizabeth und Patrick O'Neil zeigten 1995 in „A Critique of ANSI SQL Isolation Levels" (ACM SIGMOD), dass die formalen Definitionen der drei Anomalien mehrdeutig sind (P- beziehungsweise A-Varianten) und die gängigen Implementierungen nicht sauber beschreiben. Der Aufsatz führte außerdem die Snapshot Isolation ein — eine Stufe, die nicht im ANSI-Standard steht, aber von vielen Systemen umgesetzt wird.

Sperren oder Snapshots

Hinter den Isolationsebenen stehen zwei grundlegend verschiedene Mechanismen: pessimistische Sperrprotokolle wie das Two-Phase Locking und die optimistische Mehrversionen-Verwaltung (MVCC) mit konsistenten Snapshots. MVCC ist der Unterbau von Snapshot Isolation, Read Committed und Repeatable Read in PostgreSQL, InnoDB und Oracle.

Praxis: Welche Ebene wählen?

  • Read Committed: Alltags-Standard für Berichte und Anwendungen, die keine unbestätigten Daten lesen dürfen.
  • Repeatable Read: wenn eine Transaktion wiederholt dieselben Werte sehen muss.
  • Serializable: wenn Invarianten unbedingt gelten müssen — der Preis sind Abbrüche und Sperrkonkurrenz.

Die Serialisierbarkeit ist nicht mit der Linearisierbarkeit zu verwechseln: Serialisierbarkeit verlangt nur eine serielle Ordnung, Linearisierbarkeit zusätzlich die Bindung an die reale Zeit.

Verwandte Grundlagen: Transaktion, ACID, Deadlock, Two-Phase Locking, MVCC.