问题描述
每当在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