После небольшого поиска и тестирования я уверен, что смогу дать правильный ответ на свой вопрос.
Я должен поблагодарить Мартина Смита, который направил меня в правильном направлении, указав, что ресурсы ожидания были другими.
Как писал Мартин в своем комментарии, ресурсы ожидания: 11: 290100074: 0 и 11: 290100074: 5.
После поиска выясняется, что если вы запускаете Sql Server R2 на машине с 16 или более процессорами, то Sql Server может использовать функцию под названием блокировка разделов .
Эта статья говорит, среди прочего:
Только режимы блокировки NL, SCH-S, IS, IU и IX фиксируются на одном
перегородка.
Что происходит в моем случае, так это то, что spid 155 устанавливает общую блокировку для строки или страницы и, следовательно, устанавливает предполагаемую общую блокировку для объекта, а с помощью функции блокировки раздела это происходит с идентификатором раздела 5.
В то же время spid 124 должен заблокировать весь объект с помощью эксклюзивной блокировки, и для этого необходимо установить блокировку X для всех разделов.
Shared (S), эксклюзивные (X) и другие блокировки в режимах, отличных от NL,
SCH-S, IS, IU и IX должны быть получены на всех разделах, начиная с
идентификатор раздела 0 и следующий в порядке идентификатора раздела.
Когда он приходит к разделу с идентификатором 5, ему сообщают, что spid 155 содержит блокировку IS и ему нужно подождать, пока эта блокировка не будет снята.
Теперь, когда spid 124 ожидает снятия блокировки IS повышение блокировки происходит на spid 155 и запрашивает общую блокировку таблицы. Это означает, что он должен установить S-блокировку на все разделы, начиная с идентификатора 0. Но сразу же с идентификатором 0 он попадает в стену, потому что spid 124 уже имеет эксклюзивную блокировку для этого раздела. И у вас есть причина тупика.
Я не могу гарантировать 100%, это точный ответ, но я уверен, что я, если не на 100% прав, по крайней мере близок к ответу.
Решение? Что ж. Функцию блокировки раздела нельзя отключить, но, с другой стороны, вы можете управлять эскалацией блокировки с различными уровнями транзакций, а также с различными параметрами в операторе alter table.
Я продолжу исследовать, почему запрос вызывает эскалацию блокировки, потому что я считаю, что решение в моем конкретном случае состоит в том, чтобы как-то настроить запрос, чтобы он не увеличивался. По крайней мере, я попробую это перед использованием инструментов, упомянутых выше.
Надеюсь, этот ответ поможет другим с подобными проблемами.