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

 

Isolationsstufen und Konsistenz

In SQL Anywhere können Sie kontrollieren, inwieweit Vorgänge in einer Transaktion für die Vorgänge in anderen gleichzeitigen Transaktionen sichtbar sind. Dazu setzen Sie eine Datenbankoption namens Isolationsstufe.

In SQL Anywhere können Sie außerdem die Isolationsstufen einzelner Tabellen in einer Abfrage mit entsprechenden Tabellen-Hints kontrollieren.

SQL Anywhere unterstützt die folgenden Isolationsstufen:

Isolationsstufe Merkmale
0—read uncommitted (nicht festgeschriebene Daten lesen)
  • Lesen der Zeile mit oder ohne Schreibsperre zulässig

  • Es werden keine Lesesperren angewandt.

  • Keine Garantie, dass gleichzeitige Transaktionen nicht die Zeile ändern oder Änderungen an der Zeile zurücksetzen

  • Entspricht den Tabellen-Hints NOLOCK und READUNCOMMITTED.

  • Lässt Dirty Reads, nicht wiederholbare Lesevorgänge und Phantomzeilen zu

1 - read committed (festgeschriebene Daten lesen)
  • Nur Lesen von Zeilen ohne Schreibsperre zulässig.

  • Lesesperre wird nur für die aktuelle Zeile gesetzt und gehalten, aber freigegeben, wenn der Cursor von der Zeile geht

  • Keine Garantie, dass Daten nicht während der Transaktion geändert werden

  • Entspricht dem Tabellen-Hint READCOMMITTED.

  • Verhindert Dirty Reads

  • Lässt nicht wiederholbare Lesevorgänge und Phantomzeilen zu

2 - repeatable read (wiederholbare Lesevorgänge)
  • Nur Lesen von Zeilen ohne Schreibsperre zulässig.

  • Die Lesesperre wird gesetzt, während die einzelnen Zeilen in der Ergebnismenge gelesen werden, und bis zum Ende der Transaktion gehalten.

  • Entspricht dem Tabellen-Hint REAPEATABLEREAD.

  • Verhindert Dirty Reads und nicht wiederholbare Lesevorgänge

  • Lässt Phantomzeilen zu

3 - serializable (serialisierbar)
  • Nur Lesen von Zeile ohne Schreibsperre im Ergebnis zulässig

  • Lesesperren werden gesetzt, wenn der Cursor geöffnet wird, und gehalten, bis die Transaktion endet.

  • Entspricht den Tabellen-Hints HOLDLOCK und SERIALIZABLE.

  • Verhindert Dirty Reads, nicht wiederholbare Lesevorgänge und Phantomzeilen

snapshot1
  • Es werden keine Lesesperren angewandt.

  • Lesen aller Zeilen erlaubt.

  • Ein Datenbank-Snapshot der festgeschriebenen Daten wird angefertigt, wenn die erste Zeile von der Transaktion gelesen oder aktualisiert wird.

statement-snapshot (Anweisungs-Snapshot)1
  • Es werden keine Lesesperren angewandt.

  • Lesen aller Zeilen erlaubt.

  • Ein Datenbank-Snapshot der festgeschriebenen Daten wird angefertigt, wenn die erste Zeile von der Anweisung gelesen wird.

readonly-statement-snapshot (schreibgeschützter Anweisungs-Snapshot)1
  • Es werden keine Lesesperren angewandt.

  • Lesen aller Zeilen erlaubt.

  • Ein Datenbank-Snapshot der festgeschriebenen Daten wird angefertigt, wenn die erste Zeile von einer Nur-Lesen-Anweisung gelesen wird.

  • Verwendet für eine aktualisierbase Anweisung die Isolationsstufe (0, 1, 2 oder 3), die mit der Option "updatable_statement_isolation" festgelegt wurde.

1 Snapshot-Isolation muss für die Datenbank aktiviert sein, indem Sie Option "allow_snapshot_isolation" auf "On" setzen.

Die Standardisolationsstufe ist 0, außer für Verbindungen mit Open Client, jConnect und TDS, bei denen die Standardisolationsstufe 1 ist.

Auf Sperren basierende Isolationsstufen verhindern manche oder alle Interferenzen. Stufe 3 bedeutet die höchste Isolationsstufe. Niedrigere Stufen erlauben mehr Inkonsistenzen, haben aber normalerweise eine bessere Performance. Die Standardeinstellung ist Stufe 0 (Read Uncommitted).

Die Snapshot-Isolationsstufen verhindern alle Interferenzen zwischen Lese- und Schreibvorgängen. Es kann jedoch zu Interferenzen zwischen Schreibzugriffen kommen. Einige Inkonsistenzen sind möglich und die Performance in Konfliktsituationen ist die gleiche wie auf Isolationsstufe 0. Die Performance, die nicht im Zusammenhang mit Konflikten steht, ist schlechter, da Zeilenversionen gespeichert und verwendet werden müssen.

Allgemein gilt, dass jede Isolationsstufe durch die benötigten Sperrentypen charakterisiert wird und wie Sperren behandelt werden, die von anderen Transaktionen kommen. Bei Isolationsstufe 0 benötigt der Datenbankserver nur Schreibsperren. Er verwendet diese Sperren, um zu gewährleisten, dass nicht zwei Transaktionen einander widersprechende Änderungen durchführen. So setzt zum Beispiel eine Stufe 0-Transaktion eine Schreibsperre für eine Zeile, bevor sie sie aktualisiert oder löscht, und jede neue Zeile wird mit einer bereits eingerichteten Schreibsperre eingefügt.

Stufe 0-Transaktionen führen keine Überprüfung der Zeilen durch, die sie lesen. Wenn zum Beispiel eine Stufe 0-Transaktion eine Zeile liest, überprüft sie nicht, welche Sperren möglicherweise von anderen Transaktionen für diese Zeile gesetzt wurden. Da keine Überprüfungen notwendig sind, sind Stufe 0-Transaktionen besonders schnell. Diese Geschwindigkeit geht auf Kosten der Konsistenz. Jedes Mal, wenn Transaktionen eine Zeile lesen, für die es eine Schreibsperre durch eine andere Transaktion gibt, laufen Sie Gefahr, nicht festgeschriebene Daten zu erhalten. Bei Stufe 1 überprüfen Transaktionen, ob Schreibsperren vorliegen, bevor sie eine Zeile lesen. Obwohl hierfür ein Arbeitsgang mehr notwendig ist, ist bei diesen Transaktionen sichergestellt, dass sie nur festgeschriebene Daten lesen.

Hinweise

Alle Isolationsstufen garantieren, dass jede Transaktion vollständig oder überhaupt nicht ausgeführt wird, und dass keine Aktualisierungen verloren gehen.

Die Isolation besteht nur zwischen Transaktionen: Mehrere Cursor innerhalb derselben Transaktion können einander nicht überlagern.

 Siehe auch

Snapshot-Isolation
Typische Arten von Inkonsistenz
So legen Sie die Isolationsstufe fest
Isolationsstufen in ODBC-fähigen Anwendungen
Isolationsstufe anzeigen