Проблема взаимоблокировки в MSFlow — обновление данных с компакт-дисков на SQL

#sql-server #dynamics-crm #power-automate #common-data-service

#sql-сервер #динамика-crm #power-automate #common-data-service

Вопрос:

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

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

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

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

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

Ответ №1:

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

На графике будет показано, какая именно блокировка ресурсов вызывает ее, и задействованные операторы.

Ответ №2:

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

 SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
  

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