Проблема взаимоблокировки в MSFlow - обновление данных из CDS в SQL

Я создал поток для обновления GUID (уникальный идентификатор записей сущностей CDS) в таблице SQL Server из CDS всякий раз, когда в CDS создается новая запись. Поток работает нормально, если я создаю записи одну за другой. Но если я импортирую несколько записей (около 3000 записей) из SQL в CDS с использованием потоков данных, я получаю указанную ниже ошибку взаимоблокировки в потоках.

Транзакция (идентификатор процесса 74) зашла в тупик на ресурсах блокировки с другим процессом и была выбрана жертвой тупика. Повторите транзакцию.

Поток данных обновляет данные по расписанию. Таким образом, я не мог каждый раз повторно отправлять неудавшиеся прогоны.

Как избавиться от этой тупиковой проблемы? Или есть ли другие подходы к эффективному обновлению таблицы SQL?

Я пробовал такие параметры, как степень параллелизма (10 записей), политика повтора. Но бесполезно. Если я уменьшу количество параллельно работающих записей до 1, тогда он будет работать медленно и потребуется более 1 часа для обновления 1000 записей.


person Kathir Subramaniam    schedule 13.10.2020    source источник


Ответы (2)


Если ваш запрос является deadlock жертвой, вы можете создать расширенный сеанс событий для записать подробную информацию об этом мероприятии. Затем, имея график тупиков, вы найдете настоящая причина вашей проблемы.

График покажет вам, что именно вызвало блокировку ресурса, и задействованные операторы.

person gotqn    schedule 13.10.2020

вы можете попробовать изменить уровень изоляции ваших транзакций в вашем соединении с

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

чтобы узнать больше, https://docs.microsoft.com/en-us/sql/connect/jdbc/understanding-isolation-levels?view=sql-server-ver15

person Serkan Ekşioğlu    schedule 13.10.2020