Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (Deutsch) » SQL Anywhere Server - SQL-Benutzerhandbuch » Datenbanken erstellen » Transaktionen und Isolationsstufen verwenden » Funktionsweise von Sperren

 

Positionssperren

Zusätzlich zu Zeilensperren verwendet SQL Anywhere auch eine Art von Schlüsselbereichssperren, die Anomalien aufgrund von Phantomen oder Phantomzeilen verhindern. Positionssperren sind nur relevant, wenn der Datenbankserver Transaktionen verarbeitet, die auf Isolationsstufe 3 ablaufen.

Transaktionen, die auf Isolationsstufe 3 ablaufen, werden als serialisierbar bezeichnet. Dies bedeutet, dass das Verhalten einer Transaktion auf Isolationsstufe 3 nicht durch parallele Aktualisierungsaktivitäten anderer Transaktionen beeinflusst werden sollte. Insbesondere können auf Isolationsstufe 3 keine Transaktionen durch INSERTs oder UPDATEs — Phantome — beeinflusst werden, die Zeilen einfügen, die sich auf die Ergebnisse einer Berechnung auswirken könnten. SQL Anywhere verwendet Positionssperren, um solche Aktualisierungen zu verhindern. Diese zusätzlichen Sperren unterscheiden Isolationsstufe 2 ("repeatable read", d.h., wiederholbare Lesevorgänge) von Isolationsstufe 3.

Um das Erstellen von Phantomzeilen zu verhindern, setzt SQL Anywhere Sperren für Positionen innerhalb eines physischen Scans einer Tabelle. Bei einem sequenziellen Scan basiert die Scan-Position auf dem Zeilenidentifizierer der aktuellen Zeile. Bei einem Index-Scan basiert die Scan-Position auf dem Index-Schlüsselwert der aktuellen Zeile (der eindeutig oder nicht eindeutig sein kann). Durch die Sperre einer Suchposition verhindert eine Transaktion Einfügungen anderer Transaktionen in Bezug auf einen bestimmten Wertebereich in dieser Zeilenreihenfolge. Dies umfasst INSERT- und UPDATE-Anweisungen, die den Wert eines indizierten Attributs ändern. Wenn eine Scan-Position gesperrt ist, wird die UPDATE-Anweisung als Anforderung angesehen, mit DELETE den Indexeintrag zu löschen, unmittelbar gefolgt von einer INSERT-Anforderung.

SQL Anywhere unterstützt zwei Arten von Positionssperren: Phantomsperren und Anti-Phantomsperren. Bei beiden Arten handelt es sich um gemeinsame Sperren, da beliebig viele Transaktionen die gleiche Art von Sperren für dieselben Zeilen setzen können. Bei Phantomsperren und Anti-Phantomsperren kommt es jedoch zu Konflikten.


Phantomsperren
Einfügesperren