Блокировка строк / страниц / таблиц SQL Server, когда они происходят? - PullRequest
1 голос
/ 31 октября 2011

Мне было интересно, может кто-нибудь объяснить мне немного о блокировке и эскалации блокировки в SQL Server (2008) или указать мне хорошую статью об этом.

Я хочу лучше понять, когда может произойти блокировка (строка / страница / таблица) или в каком сценарии SQL Server решит повысить блокировку.

Например, оператор удаления без указанной транзакции вызовет блокировку таблицы, если удаляется много строк, или блокировка произойдет только при использовании явных транзакций?

Я знаю, что это потенциально большой вопрос, но любой вклад приветствуется.

Dirk

1 Ответ

2 голосов
/ 16 апреля 2012

Ваш вопрос: блокировка строк / страниц / таблиц SQL Server, когда они происходят?

Ответ: Вы имеете в виду Эскалацию блокировок.Повышение блокировки (Row / Page / Table) происходит (1), когда по меньшей мере 5000 блокировок получено для одной неразделенной таблицы или индекса (2), когда один оператор tsql получает по меньшей мере 5000 блокировок для одного раздела многораздельной таблицы.(3) когда количество блокировок в экземпляре превышает пороги памяти или конфигурации.(4) когда конфликты блокировок препятствуют эскалации, сервер sql запускает эскалацию блокировок для каждых 1250 новых требуемых блокировок;та же таблица.Аналогичным образом, повышение блокировки не запускается, если оператор имеет самоподключение к таблице, и каждая ссылка на таблицу получает только 3000 блокировок в таблице.

Повышение блокировки происходит только для таблиц, к которым обращались ввремя запуска эскалации.

Всякий раз, когда число блокировок превышает порог памяти для эскалации блокировки, компонент Database Engine запускает эскалацию блокировки.Порог памяти зависит от настройки параметра конфигурации блокировок:

Если для параметра блокировки установлено значение по умолчанию, равное 0, то порог повышения блокировки достигается, когда память, используемая объектами блокировки, составляет 24 процента отпамять, используемая компонентом Database Engine, за исключением памяти AWE.Структура данных, используемая для представления блокировки, имеет длину около 100 байтов.Это пороговое значение является динамическим, поскольку компонент Database Engine динамически получает и освобождает память для настройки на различные рабочие нагрузки.

Если параметр блокировок имеет значение, отличное от 0, то порог эскалации блокировки составляет 40 процентов (или меньше, если имеетсянехватка памяти) значения параметра блокировки.

Следующая информация вернет информацию о блокировке для вашего экземпляра базы данных

SELECT resource_type, resource_associated_entity_id, request_status, request_mode, request_session_id, resource_description FROM sys.dm_tran_locksГДЕ resource_database_id =

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