MSFlow中的死锁问题-将数据从CDS更新到SQL

问题描述

每当在CDS中创建新记录时,我都创建了一个流程来将GUID(CDS实体记录的唯一标识符)更新到sql Server表中。如果我一个一个地创建记录,则流程运行良好。但是,如果我使用Dataflows将多个记录(约3000条记录)从sql导入到CDS,那么我会在Flows中遇到以下死锁错误

“事务(进程ID 74)在以下情况下在锁定资源上死锁 另一个过程,已被选为死锁受害者。重新运行 交易。”

数据流按计划刷新数据。因此,我无法每次都重新提交失败的运行。

如何摆脱这个僵局问题?还是还有其他方法可以有效地更新sql表?

我尝试了诸如并行度(10条记录),重试策略之类的选项。但是没用。如果我将并行运行的记录减少到1,则它运行缓慢,并且要花费1000多个小时来更新1000条记录。

解决方法

如果您的查询是deadlock的受害者,则可以向capture details创建有关此事件的扩展事件会话。然后,有了deadlock graph,您将找到造成问题的真正原因。

该图将准确显示导致它的资源锁以及所涉及的语句。

,

您可以尝试通过以下方式更改交易的隔离级别:

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

了解更多 https://docs.microsoft.com/en-us/sql/connect/jdbc/understanding-isolation-levels?view=sql-server-ver15