Dynamics crm 异步插件无法执行,因为记录更新频率太高

Dynamics crm 异步插件无法执行,因为记录更新频率太高,dynamics-crm,microsoft-dynamics,dynamics-crm-online,dynamics-crm-365,Dynamics Crm,Microsoft Dynamics,Dynamics Crm Online,Dynamics Crm 365,问题陈述:异步插件间歇性失败,因为实体记录更新速度非常快 详细分析:我们有一个经常与Access团队共享/取消共享实体记录的流程。异步插件在创建和更新之后执行。Dynamics CRM与多个系统集成,并在系统中接收更新。我们面临一个问题,因为这些异步插件由于SQL错误而失败 Sql error: Generic SQL error. CRM ErrorCode: -2147204784 Sql ErrorCode: -2146232060 Sql Number: 1205 在Dynamics

问题陈述:异步插件间歇性失败,因为实体记录更新速度非常快

详细分析:我们有一个经常与Access团队共享/取消共享实体记录的流程。异步插件在创建和更新之后执行。Dynamics CRM与多个系统集成,并在系统中接收更新。我们面临一个问题,因为这些异步插件由于SQL错误而失败

Sql error: Generic SQL error. CRM ErrorCode: -2147204784 Sql ErrorCode: -2146232060 Sql Number: 1205
在Dynamics 365 web应用程序中,如果用户创建/更新记录,插件将执行并成功。问题是,如果一个记录是通过集成系统更新的,那么在那个时候插件就会失败。为了解决这个问题,我们尝试了以下几件事,

  • 更改了异步插件的执行顺序
  • 优化了插件代码
  • 这些都帮不了什么忙,我们有没有办法在插件执行之间设置延迟?或者我们可以用其他方法克服这个障碍


    ***微软表示更新记录的频率太高(两次更新记录之间相差0.07秒)。由于执行内部SP“p_CascadeRevokeAccess”而导致死锁。

    Sql编号1205是密钥,事务导致一些死锁

    错误1205:事务(进程ID)在另一个进程的资源上被死锁,并被选为死锁受害者。重新运行事务

    我建议你注意以下几件事:

  • 您已经提到,您已经优化了插件代码,确保在插件代码中使用的任何查询表达式或fetchxml查询中都没有“锁”
  • 如果您在插件中递归更新相同的实体记录,请尝试使用创建/更新消息的预操作,并在同一同步事务中更新目标属性,而不是过多的异步事务
  • 不确定在操作后插件中触发了多少个步骤,尽管您已正确设置了执行顺序,但只有同一事务中的流程顺序可以按特定顺序控制。但您无法控制第二个事务步骤1的执行顺序,使其在上游系统更新同一实体记录的第一个事务步骤2之后运行
  • 因此,尝试编写所需的流,并在每个插件步骤中洗牌代码,以便更好地处理。尽管CRM平台考虑了一些乐观的并发技术,但您必须考虑您的实现。否则,这将成为维护的噩梦,未来的增强可能是不可能的


    您还提到了使用access团队共享/取消共享,这个问题可能与主体对象访问(POA)表更新有关。如果需要,请向Microsoft咨询卓越支持票证。

    我今天在UAT中遇到了同样的问题,我们正在将创建后插件更改为同步。错误已消失:),但使用Async的Prod中没有问题plugin@Nachiket哇,你是自己发现的还是微软的票?谢谢@Arun,我已经更新了最后一行添加的问题。在CRM中获取记录时,我不能使用锁,我想这对我没有帮助,因为撤销访问团队的访问时会导致死锁。@Nachike在我以前的任务中,我们定期在插件和SSIS Kingswavesoft包中进行了一些共享,以共享负载。。你应该试试看。