Что такое блокировки строк, страниц и таблиц? А когда они приобретаются? - PullRequest
25 голосов
/ 20 марта 2012

Я хочу узнать больше о различных типах блокировок. Database Engine aquires.

  1. Что такое
    • Блокировки строк
    • Блокировки страниц
    • Табличные блокировки
  2. Что такое страница на самом деле?Как я знаю, «строка» представляет одну запись, «таблица» представляет все записи в таблице.Но что такое страница по отношению к таблице?
  3. Когда эти блокировки (сценарии) получены компонентом Database Engine?

Пожалуйста, помогите мне понять эти концепции.

1 Ответ

41 голосов
/ 20 марта 2012

Блокировка строки

Блокировка строки - это самый низкий уровень детализации блокировки, возможный в 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 попытается удовлетворить ваш запрос, но все равно будет применять эскалацию блокировки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...