Подтвердить что ты не робот

Что такое блокировки строк, страниц и таблиц? И когда они приобретаются?

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

  • Что такое
    • Блокировка строк
    • Блокировки страниц
    • Столовые замки
  • Что такое страница на самом деле? Поскольку я знаю, что "строка" представляет одну запись, "таблица" представляет все записи в таблице. Но что такое страница по отношению к таблице?
  • Когда эти блокировки получены (сценарии) с помощью механизма Database Engine?

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

4b9b3361

Ответ 1

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

Блокировка строк - это самый низкий уровень детализации блокировки, доступный в SQL Server. Это означает, что одна или несколько определенных строк будут заблокированы, а соседние строки по-прежнему доступны для блокировки с помощью одновременных запросов.

Блокировка страницы

Блокировка страниц в SQL Server блокирует данные на 8 КБ, даже если ваш запрос требует всего 10 байт со страницы. Таким образом, ваш запрос блокирует дополнительные данные, которые вы не запрашиваете в своем запросе.

Блокировка Hobt

Когда таблица разделена на " Разделение таблиц SQL Server", возможно, что один раздел будет заблокирован (Hobt обозначает кучу или 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 попытается выполнить ваш запрос, но он по-прежнему будет применять эскалацию блокировки.