Serializable ist die höchste der vier SQL-Isolationsebenen, die der ANSI/ISO-Standard SQL-92 definiert. Transaktionen auf dieser Stufe wirken so, als würden sie nacheinander ausgeführt: Das Ergebnis entspricht exakt einer seriellen Abarbeitung, auch wenn die Datenbank die Transaktionen tatsächlich parallel verarbeitet. Damit verhindert Serializable alle klassischen Lese-Anomalien: Dirty Reads (unbestätigte Daten), Non-Repeatable Reads (wechselnde Sichten) und Phantom-Reads (plötzlich auftauchende Zeilen).
Was Serialisierbarkeit bedeutet
Eine Ausführung heißt serialisierbar, wenn es eine Reihenfolge gibt, in der die Transaktionen hintereinander abgearbeitet worden sein könnten, und diese serielle Ausführung zum selben Ergebnis führt. Die Reihenfolge muss nicht vorher bekannt sein und darf sich zwischen Läufen unterscheiden; entscheidend ist, dass sie existiert. Eine Transaktion darf also keine Invariante verletzen, die in einer seriellen Abarbeitung erhalten bliebe, und genau das garantiert das Fertigstellungsprinzip der ACID-Transaktionssicherheit.
So setzen die Datenbanken Serializable um
- PostgreSQL: Implementiert Serializable als Serializable Snapshot Isolation (SSI). Das MVCC-Verfahren beobachtet gefährliche Abhängigkeiten zwischen Transaktionen und bricht eine Transaktion ab, bevor eine Anomalie entstehen kann.
- MySQL (InnoDB): Setzt auf klassisches Sperren mit Two-Phase-Locking. Bereits Lesevorgänge erhalten gemeinsame Sperren, Next-Key-Locks schließen zusätzlich Phantom-Reads aus.
- SQL Server: Nutzt Two-Phase-Locking mit Key-Range-Locks, die ganze Wertebereiche absichern.
- Oracle: Basiert auf der Snapshot Isolation; erkennt der Optimierer einen Serialisierungskonflikt, bricht die Transaktion mit dem Fehler ORA-08177 ab.
Abgrenzung zu Snapshot Isolation und Write Skew
Die ähnlich klingende Snapshot Isolation ist nicht serialisierbar: Sie verhindert die klassischen ANSI-Anomalien, lässt aber die Anomalie namens Write Skew zu, bei der zwei Transaktionen überlappende Daten lesen und disjunkte Zeilen schreiben. Serializable, in PostgreSQL verwirklicht als SSI, erkennt genau solche Muster und unterbindet sie.
Wann sich Serializable lohnt
Die Stufe kommt zum Einsatz, wenn Invarianten über mehrere Zeilen gelten, die keine der schwächeren Stufen zuverlässig schützt, etwa Kontostände, Verfügbarkeitsregeln oder Zählwerte. Der Preis ist spürbar: mehr Sperren und längeres Warten, eine höhere Wahrscheinlichkeit für einen Deadlock sowie Abbrüche, die Anwendungen wiederholen müssen. Für die meisten Lese-lastigen Anwendungen reichen Read Committed oder Repeatable Read.
Verwandte Grundlagen: Transaktion, ACID sowie Linearisierbarkeit, das stärkste Konsistenzmodell für einzelne Objekte und das Vorbild für strikte Serialisierbarkeit.