Последовательности блокировки в SQL Server

Можно также сделать

new List<string>() { "string here" };
6
задан Tom Ferguson 7 September 2009 в 14:58
поделиться

2 ответа

Блокировка SQL Server основана на концепциях из Обработка транзакций: концепции и методы . В этой книге очень подробно объясняется, как получить замки, какие замки необходимы и почему все должно быть таким, как оно есть.

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

Уровни изоляции транзакции влияют только на блокировку чтения. При нормальном чтении зафиксировано при чтении строки устанавливается S-блокировка, которая снимается сразу после чтения. Если уровень изоляции повышен до повторяющееся чтение , то S-блокировки удерживаются до завершения транзакции. На более высоком сериализуемом уровне блокировки диапазона размещаются вместо простых блокировок строк, и они удерживаются до фиксации транзакции. Режимы моментальных снимков отличаются тем, что они не обязательно влияют на тип блокировки, но вместо этого источник чтения: строки извлекаются из хранилища версий.

Порядок / иерархия блокировок всегда один и тот же:

  • an Блокировка Sch-S устанавливается на метаданные в начале любой операции DML. Операции DDL требуют блокировок Sch-M и, следовательно, конфликтуют, поэтому DML может быть уверен в «стабильности» схемы, на которой он работает (схема объекта, а не схема базы данных ...).
  • Путь иерархии блокировок к строке - таблица-страница-строка. Фактическая степень детализации, определяемая механизмом, является динамической . Обычно - строка.
  • Независимо от степени детализации, путь к фактически заблокированному ресурсу защищен намеренными блокировками . Т.е. для S-блокировки строки читатель должен установить IS-блокировку для таблицы и страницы. Для S-блокировки страницы требуется IS-блокировка таблицы.
  • Операции с одним разделом, получающие более 5000 блокировок при сканировании, могут вызвать эскалацию блокировки . Эскалация - это всегда попытка (т. Е. Никогда не будет блокироваться в случае неудачи). На практике эскалация всегда идет от блокировки на уровне строки к блокировке на уровне таблицы (раздел в 2008 году).

Подсказки блокировки никогда не могут изменить порядок блокировок, они могут только изменить:

  • тип блокировки (U-блокировка или X-блокировка, когда потребуется S-блокировка)
  • степень детализации (принудительная таблица, страница или строка)
  • продолжительность (удержание S-блокировок)
  • поведение блокировки (прочтите предыдущее, чтобы пропустить несовместимые строки).

Я не особо много говорил о вставке / обновлении / удалении, поскольку они довольно неинтересны: они требуют блокировок X, вот и все. Единственное, что интересно в этом, так это то, как работает обновление, потому что оно сначала получает U-блокировку, которая позже преобразуется в X-блокировку. Такое поведение необходимо для использования асимметрии U-блокировки , которая позволяет сбросить ожидающие S-блокировки до того, как будет продолжено обновление.

Надеюсь, вы сможете найти все детали, упущенные из статей и ссылки на книги.

7
ответ дан 10 December 2019 в 02:50
поделиться

Как насчет этого:

ОБНОВЛЕНИЕ: как насчет дополнительных сведений об уровнях изоляции транзакций и подсказках по запросам:

Если вас интересуют эти довольно сложные темы, я настоятельно рекомендую вам получить книгу Внутренние элементы SQL Server 2008 Калена Делани (и других), в которой есть все эти мельчайшие подробности - даже в В этой книге "блокирующая" тема начинается только на страницах 610 и выше: -)

альтернативный текст http://ecx.images-amazon.com/images/I/51rX6Z83U3L._BO2,204,203,200_PIsitb-стикер-стрелка-щелчок, TopRight, 35, -76_AA240_SH20_OU01_.jpg

Марк

2
ответ дан 10 December 2019 в 02:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: