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

SAP Sybase SQL Anywhere 16.0 (Deutsch) » SQL Anywhere Server - SQL-Benutzerhandbuch » Transaktionen und Isolationsstufen » Funktionsweise von Sperren

 

Positionssperren

Zusätzlich zu Zeilensperren implementiert SQL Anywhere auch Positionssperren, eine Art von Schlüsselbereichsperren, 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, sind serialisierbar. Das Verhalten einer Transaktion auf Isolationsstufe 3 sollte nicht durch parallele Aktualisierungsaktivitäten anderer Transaktionen beeinflusst werden. 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. Dieses Verhalten gilt für 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 Einfügesperren. 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