Поиск причины эскалации блокировки

Во время работы SQL Server Profiler я достиг некоторой блокировки: эскалации. Когда я искал операторы с тем же SPID, что и у события Lock:Escalation, я понял, что это вызвано одним из операторов delete.

Есть ли способ узнать, почему в таком месте происходит повышение блокировки?

Заявление похоже на:

delete from BOOK_IN_LIBRARY where libraryId in (,,,,); <-20 elements ids

CREATE TABLE BOOK_IN_LIBRARY(
[libraryId] [bigint] NOT NULL,
[bookId] [bigint] NULL,
[otherData] [bigint]NULL,
[otherData2] [int] NULL,
[otherData3] [int] NOT NULL,
PRIMARY KEY CLUSTERED
(
[libraryId] ASC,
[bookId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

2 ответа

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

Удаление 20 из этих идентификаторов означает удаление до 68000 строк. Оператор превышает порог блокировок строк, после которого база данных создает эскалацию блокировок. Дополнительная информация Lock Escalation (Database Engine). Ответ благодаря комментарию James Z. Спасибо!

Другие вопросы по тегам