Эта проблема не слишком своеобразна - она типична, когда разработчики мало знают о том, как работает блокировка, и просто думают о транзакциях как о «черных ящиках» и ожидают, что их решения масштабируются.
Митчправильно в комментариях о плате кому-то, кто является экспертом - это проблема, которая слишком велика для любого решения на SO.Вам нужно будет вооружиться следами запросов, вызывающих взаимоблокировки, и вам придется анализировать все, от ваших индексов до дизайна таблицы, до уровней изоляции транзакций, до шаблонов запросов.
Я предлагаю начать с SQL Server Profiler и настроить трассировку, которая будет генерировать график взаимоблокировки.Это, по крайней мере, идентифицирует ваши проблемные запросы и ресурсы, которые находятся в тупике.Настройте другую трассировку для поиска медленных запросов (скажем, 100 мс) и ускорьте их тоже.Чем дольше выполняются ваши запросы, тем выше вероятность конфликта блокировок.