Заключване на ред
Заключването на ред е възможно най-ниското ниво на детайлност на заключване в SQL Server. Това означава, че един или повече конкретни редове ще бъдат заключени, а съседните редове все още са достъпни за заключване чрез едновременни заявки.
Заключване на страница
Заключването на страница в SQL Server ще заключи данни на стойност 8K, дори когато вашата заявка се нуждае само от 10 байта от страницата. Така вашата заявка ще заключи допълнителни данни, които не сте поискали в заявката си.
Заключване на Hobt
Когато дадена таблица е разделена с "SQL Server Table partitioning", е възможно единичен дял да бъде заключен (Hobt означава Heap или B-Tree)
Забележка: Ескалацията на заключване към HOBT брави е деактивирана по подразбиране. стартирайте ALTER TABLE MyTable SET (LOCK_ESCALATION = AUTO)
за да активирате ескалация на заключване на HOBT.
Заключване на маса
Заключване на масата ще заключи цялата таблица.
Какво представляват страниците с данни
Microsoft SQL Server организира всичките си данни в „Страници с данни“, които могат да съдържат 8K данни. Това означава, че за всеки достъп до данни в SQL Server 8K информация ще бъде прочетена.
Страниците с данни могат да съдържат информация само от една таблица и оформлението на страницата е добре документирано в MSDN
Фактът, че SQL Server винаги ще чете пълна страница с данни, също ви дава представа защо предпочита да използва заключвания на ниво страница. Последствието от заключванията на ниво страница е, че може да заключите много повече данни, отколкото си мислите.
Например, приемете, че имаме таблица с общ размер на записа от 1024 байта с клъстериран индекс в полето ID
. Когато изпълним следната заявка:SELECT * from MyTable (xlock) where ID = 123
не само този запис ще бъде заключен, но (в зависимост от запълването на страницата) ще бъдат заключени и максимум 3 допълнителни записа.
Кога са придобити тези ключалки
Заявката ще бъде анализирана от управителя на заявката и необходимите заключвания ще бъдат определени и поискани от мениджъра на заключване. SQL Server ще се опита да постигне баланс между производителност и конкуренция, за да определи стратегията за заключване.
SQL Server също така следва система за "ескалиране на заключване", която ще намали детайлността на заключването, когато се придобиват повече от 5000 ключалки от определен тип. Вижте тази статия относно ескалацията на заключване за повече информация.
Това поведение може да бъде коригирано с помощта на подсказки за заключване с акцент върху подсказки , в заявка можете да посочите за таблица какъв вид ключалки бихте предпочели. SQL Server ще се опита да изпълни вашата заявка, но все пак ще приложи ескалация на заключване.