2015-06-19 3 views
1

При запуске 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] 
+1

Есть ли у вас какие-либо оценки о том, сколько строк составляет 20 идентификаторов? –

+0

Часто вы можете обнаружить это в плане запроса (как разумная догадка). Опубликуйте фактический план выполнения как XML, возможно, на pastebin. – usr

+0

JamesZ хороший вопрос! Это даже до 3400. Я не ожидал, что будет столько строк. Итак, я достиг порога, после которого SQL Server выбирает PAGE/TABLE Lock вместо простой блокировки строк. Спасибо! – romsac

ответ

0

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

0

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