sql >> Databáze >  >> RDS >> Database

Tipy pro zámky čtení/zápisu v závislosti na úrovni izolace transakcí v MSSQL

Přečíst bez závazku

  • Pokud se data mění v jedné transakci, výběr těchto dat (v jiné transakci nebo bez transakce) nebude čekat na dokončení první transakce a vrátí datové záznamy o nepotvrzených transakcích.
  • Pokud se data načítají v jedné transakci, aktualizace těchto dat v jiné transakci nebudou čekat na dokončení první transakce.
  • Sdílené zámky se nepoužívají. Identické s nastavením t on NOLOCK nápověda pro všechny výběry ve čtení potvrzeno.
  • Výhradní zámky jsou povoleny během provádění příkazu a deaktivovány na konci o z transakce .

Read Committed + read_committed_snapshot off
(změnit databázi xxx nastavit read_committed_snapshot off)

  • Pokud se data mění v jedné transakci, výběr těchto dat (v jiné transakci nebo bez transakce) počká na dokončení první transakce. Vybrat vyvolejte pomocí NOCHECK nápověda vrátí upravená, ale nepotvrzená data.
  • Pokud se data načítají v jedné transakci, aktualizace těchto dat v jiné transakci nebudou čekat na dokončení první transakce.
  • Sdílené zámky jsou povoleny během provádění příkazu a deaktivovány na konci příkazu nt provedení .
  • Exkluzivní zámky jsou aktivovány během provádění příkazu a deaktivovány na konci transakce .

Read Committed + read_committed_snapshot on
(změnit databázi xxx nastavit read_committed_snapshot on)

  • Pokud se data mění v jedné transakci, výběr těchto dat (v jiné transakci nebo bez transakce) nebude čekat na dokončení první transakce a vrátí hodnoty v momentě t z zahájení transakce . Vyberte pomocí ten Nápověda NOCHECK vrátí upravená, ale nepotvrzená data.
  • Pokud se data načítají v jedné transakci, aktualizace těchto dat v jiné transakci nebudou čekat na dokončení první transakce.
  • Sdílené zámky se nepoužívají. Místo toho je použit mechanismus Row Versioning – data aktualizovaných záznamů jsou uložena v tempdb .
  • Exkluzivní zámky jsou aktivovány během provádění příkazu a jsou deaktivovány na konci transakce .

Opakovatelné čtení

  • Pokud se data mění v jedné transakci, výběr těchto dat (v jiné transakci nebo bez transakce) počká na dokončení první transakce. Vyberte pomocí ten Nápověda NOLOCK vrátí upravená, ale nepotvrzená data.
  • Pokud jsou data čtena v jedné transakci, aktualizace těchto dat v jiné transakci počká na dokončení první transakce.
  • Sdílené zámky jsou povoleny během provádění příkazu a deaktivovány na konci transakce , na rozdíl od Read Committed.
  • Exkluzivní zámky jsou aktivovány během provádění příkazu a deaktivovány na konci transakce .

Serializovatelný

  • Pokud se data mění v jedné transakci, výběr těchto dat (v jiné transakci nebo bez transakce) počká na dokončení první transakce. Vyberte pomocí Nápověda NOLOCK bude vrátit upravená, ale nepotvrzená data.
  • Pokud jsou data čtena v jedné transakci, aktualizace těchto dat v jiné transakci počká na dokončení první transakce.
  • Sdílené zámky jsou povoleny během provádění příkazu a deaktivovány na konci transakce .
  • Exkluzivní zámky jsou aktivovány během provádění příkazu a jsou deaktivovány na konci transakce.
  • Exkluzivní zámky rozsahu jsou povoleny pro klíče, které splňují rozsah kritérií dotazu. Vkládání nových záznamů spadajících do tohoto rozsahu není povoleno. Totožné s nastavením ten HOLDLO CK nápověda pro všechny SELECTy v Přečtěte si Committed.

Snímek
(změnit databázi xxx nastavit allow_snapshot_isolation na)

  • Pokud se data mění v jedné transakci, výběr těchto dat (v jiné transakci nebo bez transakce) nebude čekat na dokončení první transakce. a vrátí hodnoty v tuto chvíli z zahájení transakce . Vyberte pomocí Nápověda NOLOCK bude vrátit upravená, ale nepotvrzená data.
  • Pokud se data načítají v jedné transakci, aktualizace těchto dat v jiné transakci nebudou čekat na dokončení první transakce.
  • Sdílené zámky se nepoužívají. Místo toho je použit mechanismus Row Versioning – data aktualizovaných záznamů jsou uložena v tempdb .
  • Výhradní zámky jsou aktivovány během provádění příkazu a deaktivovány na konci transakce.

Testováno na MSSQL 2014.


  1. Redundance Oracle RAC N+1

  2. Jak mohu vstoupit do SQL Server uloženého procesu z mého kódu C#?

  3. Co je to vztah typu one-to-one v databázi?

  4. Získejte krátký název měsíce v PostgreSQL