Database
 sql >> Datenbank >  >> RDS >> Database

Tipps für Lese-/Schreibsperren in Abhängigkeit von der Transaktionsisolationsstufe in MSSQL

Unbestätigt lesen

  • Wenn Daten in einer Transaktion geändert werden, wird die Auswahl dieser Daten (in einer anderen Transaktion oder ohne Transaktion) nicht warten, bis die erste Transaktion abgeschlossen ist, und Dateneinträge von nicht festgeschriebenen Transaktionen zurückgeben.
  • Wenn Daten in einer Transaktion gelesen werden, warten Aktualisierungen dieser Daten in einer anderen Transaktion nicht, bis die erste Transaktion abgeschlossen ist.
  • Gemeinsame Sperren werden nicht verwendet. Identisch mit Einstellung t er NOLOCK Hinweis für alle Auswahlen in Read Committed.
  • Exklusive Sperren werden während der Anweisungsausführung aktiviert und am Ende von deaktiviert für die Transaktion .

Read Committed + read_committed_snapshot aus
(Datenbank xxx ändern, read_committed_snapshot ausschalten)

  • Wenn Daten in einer Transaktion geändert werden, wird die Auswahl dieser Daten (in einer anderen Transaktion oder ohne Transaktion) warten, bis die erste Transaktion abgeschlossen ist. Wählen ct mit das NOCHECK Hinweis gibt geänderte, aber nicht festgeschriebene Daten zurück.
  • Wenn Daten in einer Transaktion gelesen werden, warten Aktualisierungen dieser Daten in einer anderen Transaktion nicht, bis die erste Transaktion abgeschlossen ist.
  • Gemeinsame Sperren werden während der Ausführung der Anweisung aktiviert und am Ende der Anweisung deaktiviert nicht ausführen .
  • Exklusive Sperren werden während der Anweisungsausführung aktiviert und am Ende der Transaktion deaktiviert .

Read Committed + read_committed_snapshot on
(Datenbank xxx ändern, read_committed_snapshot aktivieren)

  • Wenn Daten in einer Transaktion geändert werden, wird die Auswahl dieser Daten (in einer anderen Transaktion oder ohne Transaktion) nicht warten, bis die erste Transaktion abgeschlossen ist, und Werte im Moment zurückgeben t von das Transaktionsstart . Mit auswählen die NOCHECK-Hinweis gibt geänderte, aber nicht festgeschriebene Daten zurück.
  • Wenn Daten in einer Transaktion gelesen werden, warten Aktualisierungen dieser Daten in einer anderen Transaktion nicht, bis die erste Transaktion abgeschlossen ist.
  • Gemeinsame Sperren werden nicht verwendet. Stattdessen wird der Zeilenversionierungsmechanismus verwendet – Daten der aktualisierten Datensätze werden in tempdb gespeichert .
  • Exklusive Sperren werden während der Anweisungsausführung aktiviert und am Ende der Transaktion deaktiviert .

Wiederholbarer Lesevorgang

  • Wenn Daten in einer Transaktion geändert werden, wird die Auswahl dieser Daten (in einer anderen Transaktion oder ohne Transaktion) warten, bis die erste Transaktion abgeschlossen ist. Auswahl mit die Der NOLOCK-Hinweis gibt geänderte, aber nicht festgeschriebene Daten zurück.
  • Wenn Daten in einer Transaktion gelesen werden, warten Aktualisierungen dieser Daten in einer anderen Transaktion, bis die erste Transaktion abgeschlossen ist.
  • Gemeinsame Sperren werden während der Ausführung der Anweisung aktiviert und am Ende der Transaktion deaktiviert , im Gegensatz zu Read Committed.
  • Exklusive Sperren werden während der Anweisungsausführung aktiviert und am Ende der Transaktion deaktiviert .

Serialisierbar

  • Wenn Daten in einer Transaktion geändert werden, wird die Auswahl dieser Daten (in einer anderen Transaktion oder ohne Transaktion) warten, bis die erste Transaktion abgeschlossen ist. Mit auswählen das NOLOCK-Hinweis wird Geänderte, aber nicht festgeschriebene Daten zurückgeben.
  • Wenn Daten in einer Transaktion gelesen werden, warten Aktualisierungen dieser Daten in einer anderen Transaktion, bis die erste Transaktion abgeschlossen ist.
  • Gemeinsame Sperren werden während der Ausführung der Anweisung aktiviert und am Ende der Transaktion deaktiviert .
  • Exklusive Sperren werden während der Ausführung der Anweisung aktiviert und am Ende der Transaktion deaktiviert
  • Exklusive Bereichssperren werden für Schlüssel aktiviert, die den Bereich der Abfragekriterien erfüllen. Das Einfügen neuer Datensätze innerhalb dieses Bereichs ist nicht zulässig. Identisch mit Einstellung die HOLDLO K Hinweis für alle SELECTs in Lies Committed.

Schnappschuss
(Datenbank xxx ändern, allow_snapshot_isolation aktivieren)

  • Wenn Daten in einer Transaktion geändert werden, wird die Auswahl dieser Daten (in einer anderen Transaktion oder ohne Transaktion) nicht warten, bis die erste Transaktion abgeschlossen ist. und wird im Moment Werte zurückgeben von das Transaktionsstart . Mit auswählen das NOLOCK-Hinweis wird Geänderte, aber nicht festgeschriebene Daten zurückgeben.
  • Wenn Daten in einer Transaktion gelesen werden, warten Aktualisierungen dieser Daten in einer anderen Transaktion nicht, bis die erste Transaktion abgeschlossen ist.
  • Gemeinsame Sperren werden nicht verwendet. Stattdessen wird der Zeilenversionierungsmechanismus verwendet – Daten der aktualisierten Datensätze werden in tempdb gespeichert .
  • Exklusive Sperren werden während der Ausführung der Anweisung aktiviert und am Ende der Transaktion deaktiviert

Getestet auf MSSQL 2014.