Snapshot Isolation ist eine Isolationsebene für Datenbanktransaktionen, die auf Mehrversionen-Verwaltung (MVCC, Multi-Version Concurrency Control) beruht. Hal Berenson, Phil Bernstein, Jim Gray und Kollegen definierten sie 1995 in dem Aufsatz „A Critique of ANSI SQL Isolation Levels“ (ACM SIGMOD) — auch, weil sich die klassischen ANSI-Isolationsebenen als unvollständig erwiesen.
Das Prinzip
Statt Leser durch Sperren zu blockieren, arbeitet jede Transaktion auf einem Snapshot: einem konsistenten Datenbankstand vom Start der Transaktion.
- Lesen: Eine Transaktion sieht für jede Zeile die Version, die zum Zeitpunkt ihres Starts gültig war — auch wenn andere Transaktionen die Zeile inzwischen geändert haben.
- Schreiben: Änderungen erzeugen neue Versionen, die für andere Transaktionen erst nach dem Commit sichtbar werden.
- Commit-Konflikt: Haben zwei gleichzeitige Transaktionen dieselbe Zeile geändert, verliert die zweite (Prinzip First-Commiter-Wins): Sie wird abgebrochen, sobald die erste committet hat.
Dadurch verhindert Snapshot Isolation Dirty Reads, Non-Repeatable Reads und Phantom Reads — ohne dass Leser jemals auf Schreiber warten müssen.
Die Grenze: Write-Skew
Snapshot Isolation ist dennoch nicht serialisierbar. Die bekannteste Anomalie ist der Write-Skew: Zwei Transaktionen lesen überlappende Daten, ändern aber jeweils disjunkte Zeilen. Der Konflikt-Check greift nicht, obwohl das gemeinsame Ergebnis eine Invariante verletzen kann — etwa eine Summe über Kontostände oder die Belegung eines Schichtplans.
Für echte Serialisierbarkeit existiert die Erweiterung SSI (Serializable Snapshot Isolation, Cahill/Röhm/Fekete, SIGMOD 2009): Sie erkennt gefährliche Write-Skew-Situationen und bricht eine der beteiligten Transaktionen ab.
Praxis
- PostgreSQL: Die Stufe Read Committed nutzt pro Statement einen Snapshot; Repeatable Read und Serializable (als SSI) arbeiten mit einem Snapshot pro Transaktion.
- MySQL InnoDB: Die Standardstufe Repeatable Read basiert auf MVCC-Snapshots.
- Oracle: Read Committed ist faktisch Snapshot Isolation.
- SQL Server: Bietet Snapshot Isolation als Option (ALLOW_SNAPSHOT_ISOLATION).
Einordnung in die Datenbankwelt: Snapshot Isolation liegt zwischen den klassischen Stufen der ACID-Transaktionssicherheit und entschärft Sperrprobleme, die bei einer klassischen Transaktion mit Sperren auftreten. Statt auf Sperren zu warten, bricht die Transaktion beim Konflikt ab — ein klassischer Deadlock entsteht so kaum. Auch in verteilten Systemen gibt es verwandte Sichtweisen: Sequential Consistency und PRAM-Konsistenz beschreiben Modelle, in denen jede Komponente ihren eigenen konsistenten Stand sieht.