sql >> Database >  >> RDS >> Database

Tips voor lees-/schrijfvergrendelingen, afhankelijk van het transactie-isolatieniveau in MSSQL

Lees niet-vastgelegd

  • Als gegevens in één transactie worden gewijzigd, zal de selectie van deze gegevens (in een andere transactie of zonder transactie) niet wachten tot de eerste transactie is voltooid en gegevensinvoer van niet-vastgelegde transacties retourneren.
  • Als gegevens in één transactie worden gelezen, wachten updates van deze gegevens in andere transacties niet tot de eerste transactie is voltooid.
  • Gedeelde sloten worden niet gebruikt. Identiek aan instelling t hij NOLOCK hint voor alle selecties in Read Committed.
  • Exclusieve vergrendelingen zijn ingeschakeld tijdens de uitvoering van de instructie en uitgeschakeld aan het einde o van de transactie .

Read Committed + read_committed_snapshot uit
(wijzig database xxx zet read_committed_snapshot uit)

  • Als gegevens in één transactie worden gewijzigd, zal de selectie van deze gegevens (in een andere transactie of zonder transactie) wachten tot de eerste transactie is voltooid. Sele ct met de NOCHECK tip zal gewijzigde, maar niet-vastgelegde gegevens retourneren.
  • Als gegevens in één transactie worden gelezen, wachten updates van deze gegevens in andere transacties niet tot de eerste transactie is voltooid.
  • Gedeelde vergrendelingen worden ingeschakeld tijdens de uitvoering van de instructie en uitgeschakeld aan het einde van de stateme nt uitvoering .
  • Exclusieve vergrendelingen worden ingeschakeld tijdens de uitvoering van de instructie en uitgeschakeld aan het einde van de transactie .

Lees Committed + read_committed_snapshot op
(wijzig database xxx zet read_committed_snapshot aan)

  • Als gegevens in één transactie worden gewijzigd, zal de selectie van deze gegevens (in een andere transactie of zonder transactie) niet wachten tot de eerste transactie is voltooid, en zullen de waarden op dit moment worden geretourneerd t van de transactie start . Selecteer met de NOCHECK-hint retourneert gewijzigde, maar niet-vastgelegde gegevens.
  • Als gegevens in één transactie worden gelezen, wachten updates van deze gegevens in andere transacties niet tot de eerste transactie is voltooid.
  • Gedeelde sloten worden niet gebruikt. In plaats daarvan wordt het rijversiemechanisme gebruikt - gegevens van de bijgewerkte records worden opgeslagen in tempdb .
  • Exclusieve vergrendelingen worden ingeschakeld tijdens de uitvoering van de instructie en worden uitgeschakeld aan het einde van de transactie .

Herhaalbare lezing

  • Als gegevens worden gewijzigd in één transactie, zal selectie van deze gegevens (in andere transactie of zonder transactie) wachten tot de eerste transactie is voltooid. Selecteer met de NOLOCK-hint retourneert gewijzigde, maar niet-vastgelegde gegevens.
  • Als gegevens in één transactie worden gelezen, wachten updates van deze gegevens in een andere transactie tot de eerste transactie is voltooid.
  • Gedeelde vergrendelingen worden ingeschakeld tijdens de uitvoering van de instructie en uitgeschakeld aan het einde van de transactie , in tegenstelling tot Read Committed.
  • Exclusieve vergrendelingen worden ingeschakeld tijdens de uitvoering van de instructie en uitgeschakeld aan het einde van de transactie .

Serialisatie

  • Als gegevens in één transactie worden gewijzigd, zal de selectie van deze gegevens (in een andere transactie of zonder transactie) wachten tot de eerste transactie is voltooid. Selecteer met de NOLOCK-hint zal aangepaste, maar niet-vastgelegde gegevens retourneren.
  • Als gegevens in één transactie worden gelezen, wachten updates van deze gegevens in een andere transactie tot de eerste transactie is voltooid.
  • Gedeelde vergrendelingen zijn ingeschakeld tijdens de uitvoering van de instructie en uitgeschakeld aan het einde van de transactie .
  • Exclusieve vergrendelingen worden ingeschakeld tijdens de uitvoering van de instructie en worden uitgeschakeld aan het einde van de transactie.
  • Exclusieve bereikvergrendelingen worden ingeschakeld voor sleutels die voldoen aan het zoekcriteriabereik. Invoegingen van nieuwe records die binnen dit bereik vallen, zijn niet toegestaan. Identiek aan instelling de HOLDLO CK hint voor alle SELECT's in Lees Toegewijd.

Momentopname
(wijzig database xxx zet allow_snapshot_isolation aan)

  • Als gegevens in één transactie worden gewijzigd, zal selectie van deze gegevens (in een andere transactie of zonder transactie) niet wachten tot de eerste transactie is voltooid. en retourneert waarden op dit moment van de transactie start . Selecteer met de NOLOCK-hint zal aangepaste, maar niet vastgelegde gegevens retourneren.
  • Als gegevens in één transactie worden gelezen, wachten updates van deze gegevens in andere transacties niet tot de eerste transactie is voltooid.
  • Gedeelde sloten worden niet gebruikt. In plaats daarvan wordt het rijversiemechanisme gebruikt - gegevens van de bijgewerkte records worden opgeslagen in tempdb .
  • Exclusieve vergrendelingen worden ingeschakeld tijdens de uitvoering van de instructie en uitgeschakeld aan het einde van de transactie.

Getest op MSSQL 2014.


  1. Meerdere datacenterconfiguraties met Galera Cluster voor MySQL of MariaDB

  2. VLDB's in de 20-tieners:je hebt een grotere nodig ...

  3. Verschil tussen WITH-clausule en subquery?

  4. Query die een hiërarchische lijst van typen triggergebeurtenissen in SQL Server retourneert