У меня есть связанный с схемой вид (SSMS 2008 R2), который запускает набор таблиц, поддерживаемых и обновляемых передним приложением. Ранее на этой неделе, после развертывания для обновления приложения, просмотр внезапно тупик-жертвы каждый раз, когда он запускался в Prod, несмотря на успешное выполнение в Dev thru Staging.VIEW неоднократно зашел в тупик командами на стороне приложения
Запуск трассировки и захват графа взаимоблокировки показал, что конкурирующий оператор DELETE поступает из приложения (он не выполняет записи UPDATE, а DELETE и INSERT).
Редактировать 1: взаимоблокировки вызываются конкурирующими командами на стороне приложения с блокировками уровня IX. ПРОСМОТР выпускает блокировки уровня S, но конкурирующие команды продолжают заходить в тупик, при этом запрос VIEW последовательно становится процессом жертвы. Установка изоляции на «read uncommitted» не решает проблему.
VIEW рекурсивно внешние соединения в одних и тех же таблицах несколько раз, чтобы создать связанную историю записей. Я подозреваю, что это функциональность, которая делает просмотр слишком сложным, чтобы избежать времени блокировок. Кажется, что он работает половину дней, а затем будет постоянно зависеть от других.
Это просто проблема пропускной способности, или есть лучший способ создания структур отчетности, которые могли бы устранить проблемы взаимоблокировки?
Здесь слишком много ручных размахов, покажите нам код. Начните с определения вида, затем определения его поддерживающих таблиц и их индексов/ключей. – RBarryYoung