Database
 sql >> база данни >  >> RDS >> Database

Съвети за заключвания за четене/запис в зависимост от нивото на изолация на транзакциите в MSSQL

Четене без ангажимент

  • Ако данните се променят в една транзакция, изборът на тези данни (в друга транзакция или без транзакция) няма да чака, докато първата транзакция приключи и ще върне въведени данни за незаети транзакции.
  • Ако данните се четат в една транзакция, актуализациите на тези данни в друга транзакция няма да чакат, докато първата транзакция приключи.
  • Споделените ключалки не се използват. Идентично с настройката т той NOLOCK намек за всички селекции в Read Committed.
  • Изключителните заключвания са разрешени по време на изпълнение на оператор и деактивирани в края o в транзакция .

Read Committed + read_committed_snapshot off
(alter database xxx set read_committed_snapshot off)

  • Ако данните се променят в една транзакция, изборът на тези данни (в друга транзакция или без транзакция) ще изчака, докато завърши първата транзакция. Селе ct с NOCHECK подсказка ще върне променени, но незаети данни.
  • Ако данните се четат в една транзакция, актуализациите на тези данни в друга транзакция няма да чакат, докато първата транзакция приключи.
  • Споделените заключвания се активират по време на изпълнението на оператора и се деактивират в края на състоянието nt изпълнение .
  • Изключителните заключвания се активират по време на изпълнението на оператора и се деактивират в края на транзакцията .

Read Committed + read_committed_snapshot on
(променете база данни xxx, задайте read_committed_snapshot on)

  • Ако данните се променят в една транзакция, изборът на тези данни (в друга транзакция или без транзакция) няма да чака, докато първата транзакция приключи, а ще върне стойности в момента t от начало на транзакцията . Изберете с на Съвет за NOCHECK ще върне променени, но незаети данни.
  • Ако данните се четат в една транзакция, актуализациите на тези данни в друга транзакция няма да чакат, докато първата транзакция приключи.
  • Споделените ключалки не се използват. Вместо това се използва механизмът за версия на реда – данните от актуализираните записи се съхраняват в tempdb .
  • Изключителните заключвания се активират по време на изпълнение на оператора и се деактивират в края на транзакцията .

Повтарящо се четене

  • Ако данните се променят в една транзакция, изборът на тези данни (в друга транзакция или без транзакция) ще изчака, докато първата транзакция приключи. Изберете с на Подсказката за NOLOCK ще върне променени, но незаети данни.
  • Ако данните се четат в една транзакция, актуализациите на тези данни в друга транзакция ще изчакат, докато първата транзакция приключи.
  • Споделените заключвания се активират по време на изпълнението на оператора и се деактивират в края на транзакцията , за разлика от Read Committed.
  • Изключителните заключвания се активират по време на изпълнението на оператора и се деактивират в края на транзакцията .

Може да се сериализира

  • Ако данните се променят в една транзакция, изборът на тези данни (в друга транзакция или без транзакция) ще изчака, докато първата транзакция приключи. Изберете с Намек за NOLOCK ще връщане на променени, но незаети данни.
  • Ако данните се четат в една транзакция, актуализациите на тези данни в друга транзакция ще изчакат, докато първата транзакция приключи.
  • Споделените заключвания се активират по време на изпълнение на оператора и се деактивират в края на транзакцията .
  • Изключителните заключвания се активират по време на изпълнението на оператора и се деактивират в края на транзакцията.
  • Изключителното заключване на диапазона се активира за ключове, които отговарят на диапазона на критериите за заявка. Вмъкванията на нови записи, попадащи в този диапазон, не са разрешени. Идентично на настройката на ЗАДРАЖАЙТЕ CK намек за всички SELECT в Прочетете Commited.

Моментна снимка
(alter database xxx set enable_snapshot_isolation on)

  • Ако данните се променят в една транзакция, изборът на тези данни (в друга транзакция или без транзакция) няма да чака, докато първата транзакция приключи. и ще върне стойности в момента от начало на транзакцията . Изберете с Намек за NOLOCK ще връщане на променени, но незаети данни.
  • Ако данните се четат в една транзакция, актуализациите на тези данни в друга транзакция няма да чакат, докато първата транзакция приключи.
  • Споделените ключалки не се използват. Вместо това се използва механизмът за версия на реда – данните от актуализираните записи се съхраняват в tempdb .
  • Изключителните заключвания се активират по време на изпълнението на оператора и се деактивират в края на транзакцията.

Тествано на MSSQL 2014.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Продължение №1 за водещи търсения с заместващи знаци

  2. Най-близкото съвпадение, част 3

  3. Цената на непрочистването

  4. Защо да научите Касандра с Hadoop?

  5. Как да използвате клауза HAVING в SQL