Объяснения блокировок SQL Server - PullRequest
10 голосов
/ 19 сентября 2008

Ниже приведен список блокировок, которые SQL Server 2000 должен поддерживать. Я немного смущен тем, что на самом деле означают «намеренные» блокировки. Я смотрел в Интернете, и ответы кажутся немного загадочными.

В дополнение к получению ответа на мой конкретный вопрос, я надеюсь использовать этот вопрос в качестве вики для того, что означает каждая блокировка и при каких обстоятельствах этот тип блокировки будет получен.

  • Общий (S)
    • Обновление (U)
    • Эксклюзив (X)
    • Намерение
      • намерение общего (IS)
      • намеренное исключение (IX)
      • для общего доступа с эксклюзивным намерением (SIX)
      • обновление намерений (IU)
      • обновление с намерением исключить (UIX)
      • обновление общего намерения (SIU)
    • Схема
      • модификация схемы (Sch-M)
      • Стабильность схемы (Sch-S)
    • Массовое обновление (BU)
    • Key-Range
      • Shared Key-Range и Shared Resource lock (RangeS_S)
      • Общий диапазон ключей и блокировка ресурса обновления (RangeS_U)
      • Вставить диапазон ключей и блокировку нулевого ресурса (RangeI_N)
      • Эксклюзивный диапазон ключей и Эксклюзивная блокировка ресурсов (RangeX_X)
      • Блокировка преобразования (RangeI_S, RangeI_U, RangeI_X, RangeX_S, RangeX_U)

Ответы [ 3 ]

12 голосов
/ 19 сентября 2008

Страница MSDN SQL-сервера имеет разумное объяснение:

Преднамеренная блокировка означает, что SQL Server хочет получить общую (S) блокировку или эксклюзивную (X) блокировку для некоторых ресурсов, расположенных ниже в иерархии. Например, блокировка общего намерения, размещенная на уровне таблицы, означает, что транзакция намеревается установить блокировку общего доступа (S) на страницы или строки в этой таблице. Установка намеренной блокировки на уровне таблицы не позволяет другой транзакции впоследствии получить эксклюзивную (X) блокировку для таблицы, содержащей эту страницу. Умышленные блокировки повышают производительность, поскольку SQL Server проверяет намеренные блокировки только на уровне таблицы, чтобы определить, может ли транзакция безопасно получить блокировку для этой таблицы. Это устраняет необходимость проверять каждую строку или блокировку страницы в таблице, чтобы определить, может ли транзакция заблокировать всю таблицу.

6 голосов
/ 19 сентября 2008

Блокировки намерения размещаются на уровне таблицы и указывают, что транзакция установит соответствующие блокировки в некоторых строках таблицы.

Это ускоряет проверку конфликтов для транзакций, которым необходимо установить блокировки на уровне таблицы. Например, транзакция, нуждающаяся в монопольной блокировке таблицы, может обнаружить конфликт на уровне таблицы (там будет «общая намеренная блокировка») вместо необходимости проверять все строки (или страницы) на наличие общих блокировок.

1 голос
/ 12 сентября 2014

Другая важная особенность блокировок Intent заключается в том, что вы не помещаете их из кода явно, они запрашиваются неявно, когда вы устанавливаете нецелевую блокировку.

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