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) |
|
1 - read committed (festgeschriebene Daten lesen) |
|
2 - repeatable read (wiederholbare Lesevorgänge) |
|
3 - serializable (serialisierbar) |
|
snapshot1 |
|
statement-snapshot (Anweisungs-Snapshot)1 |
|
readonly-statement-snapshot (schreibgeschützter Anweisungs-Snapshot)1 |
|
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.
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.
Snapshot-Isolation
Typische Arten von Inkonsistenz
So legen Sie die Isolationsstufe fest
Isolationsstufen in ODBC-fähigen Anwendungen
Isolationsstufe anzeigen
![]() |
Kommentieren Sie diese Seite in DocCommentXchange.
|
Copyright © 2013, SAP AG oder ein SAP-Konzernunternehmen. - SAP Sybase SQL Anywhere 16.0 |