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

Ескалация на заключване - какво се случва тук?

Заключване на ескалация " е начинът, по който SQL се справя със заключването за големи актуализации. Когато SQL ще промени много редове, за двигателя на базата данни е по-ефективно да предприеме по-малко, по-големи заключвания (напр. цяла таблица), вместо да заключва много по-малки неща (напр. заключвания на редове)

Но това може да бъде проблематично, когато имате огромна таблица, защото заключването на цялата таблица може да заключи други заявки за дълго време. Това е компромисът:много заключвания с малка детайлност са по-бавни от по-малкото (или едно) грубозърнести заключвания и наличието на множество заявки, заключващи различни части на таблица, създава възможност за блокиране, ако един процес чака друг.

Има опция на ниво таблица, LOCK_ESCALATION , ново в SQL 2008, което позволява контрол на ескалацията на заключването. По подразбиране, "TABLE" позволява заключванията да ескалират до нивото на таблицата. DISABLE предотвратява ескалацията на заключването към цялата таблица в повечето случаи. AUTO позволява заключвания на таблици, освен ако таблицата е разделена, в който случай заключванията се правят само до нивото на дяла. Вижте тази публикация в блога за повече информация.

Подозирам, че IDE добавя тази настройка при повторно създаване на таблица, тъй като TABLE е по подразбиране в SQL 2008. Имайте предвид, че LOCK_ESCALATION не се поддържа в SQL 2005, така че ще трябва да го премахнете, ако се опитвате да стартирате скрипта на Пример от 2005 г. Освен това, тъй като TABLE е по подразбиране, можете безопасно да премахнете този ред, когато стартирате отново скрипта си.

Също така имайте предвид, че в SQL 2005 преди тази настройка да присъства, всички заключвания можеха да ескалират до ниво таблица-- с други думи, "TABLE" беше единствената настройка в SQL 2005.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Запомнете това, когато форматирате тип данни TIME в SQL Server (T-SQL)

  2. Клаузата WHERE е по-добре да се изпълни преди IN и JOIN или след това

  3. Намерете име на таблица във всички обекти на всички бази данни

  4. Избиране на поднабор от редове, които надвишават процент от общите стойности

  5. Сигнали за агент на SQL Server