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.