В SP три таблицы обновляются в одной транзакции.Эти обновления зависят друг от друга.Но периодически происходит тупик во время этого обновления.Это происходит не последовательно, а скорее периодически.
Вызывается служба WCF, которая вызывает SP.Ввод SP является XML.XML анализируется с помощью метода OPENXML, а значения используются для обновления таблиц.
@ Table - табличная переменная, заполняемая OPENXML при применении входного XML SP.Входной XML содержит только один идентификатор.
<A>
<Value>XYZ</Value>
<ID>1</ID>
</A>
BEGIN TRAN
--update Table1
Update Table1
Set ColumnA = A.value
JOIN @Table A
ON Table1.ID = A.ID
--update Table2
Update Table2
Set ColumnA = Table1.ColumnA
JOIN Table1
ON Table1.ID = Table2.ID
--update Table3
Update Table3
Set ColumnA = Table1.ColumnA
JOIN Table1
ON Table1.ID = Table3.ID
COMMIT TRAN
В таблице 1 столбец идентификатора является первичным ключом.В таблице 2 в столбце идентификатора нет доступных индексов.
Здесь иногда возникает тупик при обновлении таблицы 2.
Получение сообщения об ошибке «Транзакция (идентификатор процесса 100) заблокирована для ресурсов блокировки с другим процессоми был выбран в качестве жертвы тупика. Перезапустите транзакцию. "
Требуется консультация по устранению этой периодически возникающей проблемы тупика.