ПредишенСледващото

Ако имате стандартен SQL Server (не Azure) по подразбиране са чели ниво на изолация ангажименти. Тъй като това се прави актуализация:

  1. Задайте IU - намерение за заключване актуализация на масата. Това означава, че вашият процес ще бъдат открити в този ред на таблицата, за да се актуализира.
  2. Започвайки да се движат редове в търсене на тези, които трябва да бъдат актуализирани. Преди да се провери дали или не да се актуализира един ред, той се поставя U заключване.
  3. Веднага след като на първия ред, за да актуализирате намери - да IX ключалката на масата. Вашият процес наистина се случва, за да актуализирате данните.
  4. По-специално низ комплект заключване X.
  5. инсталиране U и X брави продължава за всички редове, в резултат на монтирането на рентгенови брави на всеки ред актуален.

По този начин, от момента, когато тя установи, поне един запис за надграждането и преди приключване на транзакцията (до края на актуализация) на всички актуализирани редовете виси X-Лока.

В същото време изпълнява SELECT:

  1. На масата се постави, е за заключване - намерение споделен
  2. За всички избрани редове са посочени S заключване.

Проблемът е, че за заключване съвместимост pravialam брави S не може да се постави на линията, която вече стои X заключване. Всъщност, това е същността на прочете ниво на изолация АНГАЖИРАНИ - заключване X означава, че данните са се променили от друг процес, но промените все още не разполагат с vkommitany - и поради това те не могат да бъдат прочетени.

По този начин, ако имате много актуализирани данни (цялата таблица, няма къде) или актуализирана процесът на търсене на данни отнема много време (когато клауза е там, а от индекса / статистика / трудно - е да се види план!) - че по време на актуализацията, всички висящи забавя и пада на изчакване.

За да получите около това досадно ограничение възможно изолация включване моментна снимка и подмяна на READ ангажира да READ_COMMITTED_SNAPSHOT.

В READ_COMMITTED_SNAPSHOT SELECT ще избере данни от собствените си копия, и няма да създаде S брави на реда. Cootvetstvenno няма да се препънат, когато инсталирате S брави на грешни X ключалките и няма да чака за тях.

На SQL Azure READ_COMMITTED_SNAPSHOT активирана по подразбиране и не може да се изключи.

Свързани статии

Подкрепете проекта - споделете линка, благодаря!