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