Microsoft SQL Server
Isolationsstufen und Verriegelung
Suche…
Bemerkungen
Ich habe diesen Link gefunden - er ist nützlich als Referenz: "Isolation Levels"
Beispiele für die Einstellung der Isolationsstufe
Beispiel für die Einstellung der Isolationsstufe:
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
SELECT * FROM Products WHERE ProductId=1;
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ; --return to the default one
READ UNCOMMITTED
- bedeutet, dass eine Abfrage in der aktuellen Transaktion nicht auf die geänderten Daten einer anderen Transaktion zugreifen kann, die noch nicht festgeschrieben ist - keine fehlerhaften Lesevorgänge! ABER nicht wiederholbare Lesevorgänge und Phantomlesevorgänge sind möglich, da Daten noch durch andere Transaktionen geändert werden können.REPEATABLE READ
- bedeutet, dass eine Abfrage in der aktuellen Transaktion nicht auf die geänderten Daten einer anderen Transaktion zugreifen kann, die noch nicht festgeschrieben ist - keine fehlerhaften Lesevorgänge! Keine anderen Transaktionen können die von der aktuellen Transaktion gelesenen Daten bis zu ihrem Abschluss modifizieren, wodurch NONREPEATABLE-Lesevorgänge ausgeschlossen werden. ABER, wenn eine andere Transaktion NEW ROWS einfügt und die Abfrage mehrmals ausgeführt wird, können Phantomzeilen beim zweiten Lesevorgang erscheinen (wenn sie mit der Where-Anweisung der Abfrage übereinstimmen).SNAPSHOT
- kann nur Daten zurückgeben, die zu Beginn der Abfrage vorhanden sind. Gewährleistet die Konsistenz der Daten. Es verhindert schmutzige Lesevorgänge, nicht wiederholbare Lesevorgänge und Phantomlesevorgänge. Um dies zu verwenden, ist eine DB-Konfiguration erforderlich:
ALTER DATABASE DBTestName SET ALLOW_SNAPSHOT_ISOLATION ON;GO;
SET TRANSACTION ISOLATION LEVEL SNAPSHOT;
-
READ COMMITTED
- Standardisolation des SQL-Servers. Es verhindert, dass Daten gelesen werden, die von einer anderen Transaktion geändert wurden, bis sie festgeschrieben sind. Es verwendet gemeinsames Sperren und Zeilenversionieren für die Tabellen, wodurch Dirty Reads verhindert werden. Dies hängt von der DB-Konfiguration ab. READ_COMMITTED_SNAPSHOT - falls aktiviert - wird die Zeilenversionierung verwendet. aktivieren - verwenden Sie dies:
ALTER DATABASE DBTestName SET ALLOW_SNAPSHOT_ISOLATION ON;GO;
SET TRANSACTION ISOLATION LEVEL READ COMMITTED; --return to the default one
-
SERIALIZABLE
- Verwendet physische Sperren, die bis zum Ende der TransaktionSERIALIZABLE
und gehalten werden. Dadurch werden Dirty Reads, Phantom Reads und nicht wiederholbare Reads verhindert. ABER, es wirkt sich auf die Leistung der Datenbank aus, da die gleichzeitigen Transaktionen serialisiert werden und nacheinander ausgeführt werden.
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE ;