Ich habe die Unterschiede zwischen der SQL Server- READ COMMITTED SNAPSHOT
und der SNAPSHOT
Isolationsstufe untersucht und bin auf die folgende Ressource gestoßen:
Auswählen von zeilenversionsbasierten Isolationsstufen
Für die meisten Anwendungen wird aus den folgenden Gründen empfohlen, die festgeschriebene Isolation mit Zeilenversionsverwaltung anstelle der Snapshot-Isolation zu lesen:
Es benötigt weniger Speicherplatz als die Snapshot-Isolierung.
Die Snapshot-Isolation ist anfällig für Aktualisierungskonflikte, die beim Lesen der festgeschriebenen Isolation mithilfe der Zeilenversionierung nicht zutreffen. Wenn eine Transaktion, die unter Snapshot-Isolation ausgeführt wird, Daten liest, die dann von einer anderen Transaktion geändert werden, führt eine Aktualisierung durch die Snapshot-Transaktion auf dieselben Daten zu einem Aktualisierungskonflikt, und die Transaktion wird beendet und ein Rollback ausgeführt. Dies ist kein Problem bei der durch Lesen festgeschriebenen Isolation mithilfe der Zeilenversionierung.
Ich bin etwas neu in diesen Themen, aber ich kann die beiden Punkte aus dem obigen Link nicht verstehen.
Warum sollte der Tempdb-Raum für diese Modi unterschiedlich sein? Speichert einer mehr granulare Versionierung als der andere?
Warum ist die Snapshot-Isolierung anfälliger für Aktualisierungskonflikte?
quelle
Ein weiterer Unterschied zwischen Snapshot und Read Committed Snapshot ist der folgende.
In der ersten Sitzung
SET TRAN ISOLATION LEVEL SNAPSHOT BEGINN TRAN SELECT * FROM TB1 ..... .....
In der zweiten Sitzung
Aktualisiere TB1 SET NAME = NAME + 'test' Wobei id = 1
In der ersten Sitzung
SELECT * FROM TB1 - Dies gibt den Wert name für ID = 1 zurück, nicht name + 'test' COMMIT TRAN
Im Snapshot mit festgeschriebenem Lesezugriff gibt die erste Auswahl in Sitzung 1 den Namen für id = 1 und die zweite Auswahl den Namen + 'test' zurück.
Bei der Snapshot-Isolation erstellt SQL SERVER zu Beginn der Transaktion einen Snapshot und liest diesen Snapshot während der gesamten Transaktion aus.
In Read Committed Snapshot wird der Snapshot für jede SELECT-Anweisung während der Transaktion erstellt.
quelle