При запуске SQL Server Profiler я достиг некоторого Lock: Escalations. Когда я искал выражения, имеющие тот же 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]
Есть ли у вас какие-либо оценки о том, сколько строк составляет 20 идентификаторов? –
Часто вы можете обнаружить это в плане запроса (как разумная догадка). Опубликуйте фактический план выполнения как XML, возможно, на pastebin. – usr
JamesZ хороший вопрос! Это даже до 3400. Я не ожидал, что будет столько строк. Итак, я достиг порога, после которого SQL Server выбирает PAGE/TABLE Lock вместо простой блокировки строк. Спасибо! – romsac