Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何在Prem-Dev环境下改进CRM 2011中的删除超时问题? 背景_Sql Server_Dynamics Crm 2011 - Fatal编程技术网

Sql server 如何在Prem-Dev环境下改进CRM 2011中的删除超时问题? 背景

Sql server 如何在Prem-Dev环境下改进CRM 2011中的删除超时问题? 背景,sql-server,dynamics-crm-2011,Sql Server,Dynamics Crm 2011,我有一个单元测试框架,它为我的单元测试创建实体,执行测试,然后自动删除实体。除了在我们的开发环境中删除一些实体需要15-30秒之外,它一直工作得很好 我最近在Amazon云中收到了一个VM设置,以执行一些需要几个发布周期才能完成的长期更改。当我在VM上运行单元测试时,我在尝试删除实体时不断收到SQL超时错误 台阶 我已经完成了以下发现/行动步骤: 打开跟踪后,发现用于处理级联删除的fn\u CollectForCascadeWrapper上发生超时。我的单元测试中只有6个实体,它们的删除方式不需

我有一个单元测试框架,它为我的单元测试创建实体,执行测试,然后自动删除实体。除了在我们的开发环境中删除一些实体需要15-30秒之外,它一直工作得很好

我最近在Amazon云中收到了一个VM设置,以执行一些需要几个发布周期才能完成的长期更改。当我在VM上运行单元测试时,我在尝试删除实体时不断收到SQL超时错误

台阶 我已经完成了以下发现/行动步骤:

  • 打开跟踪后,发现用于处理级联删除的
    fn\u CollectForCascadeWrapper
    上发生超时。我的单元测试中只有6个实体,它们的删除方式不需要级联删除。对它运行了估计的执行计划,并添加了它请求的一些索引。这仍然没有解决超时问题
  • 打开VM上的资源管理器以查看磁盘访问/内存/CPU。当我尝试删除时,CPU在2秒钟内达到20%,然后下降到接近0。内存保持不变,但资源管理器上的磁盘读取访问权限会非常高,并保持这种状态7-10分钟
  • 硬编码
    fn\u CollectForCascadeWrapper
    以返回结果,这意味着在我的单元测试中,6个实体不需要进行级联。运行单元测试,再次出现SQL超时错误。根据跟踪,实际的delete语句正在超时:
  • 从[New_inquiryExtensionBase]中删除,其中([New_inquiryId]=“7e250a5f-890e-40ae-9d2d-c55bbd7250cd”);
    从[New_inquiryBase]中删除
    输出已删除。[新建查询ID],10012
    进入SubscriptionTrackingDeletedObject(ObjectId,ObjectTypeCode)
    其中([New_inquiryId]=“7e250a5f-890e-40ae-9d2d-c55bbd7250cd”)
    
  • 在SQL Management Studio中手动运行查询。大约花了3分钟完成。表上没有触发器,所以我认为时间一定是由于插入。查看
    SubscriptionTrackingDeletedObject
    表,发现其中有2100条记录。删除表中的所有记录,然后重新运行我的单元测试。它实际上在正常的15-30秒的删除时间内工作
  • 研究并发现了
    SubscriptionTrackingDeletedObject
    的用途,以及异步服务将其清除。注意到服务器上没有运行异步服务。打开服务,等待10分钟,然后再次查询表。我的6个实体仍然列在那里。查看跟踪日志并看到超时错误:
    清理主体对象访问表时出错
  • 研究POA并对表执行
    SELECT COUNT(*)
    ,7分钟后返回2.61亿条记录!研究了如何清理桌子,我发现的唯一一件事是(我们目前在11号) 接下来呢?
    《行动纲领》会影响删除吗?或者,正是POA影响了异步服务,才影响了删除?插入到
    SubscriptionTrackingDeletedObject
    中真的会导致我的问题吗?

    我最后打开了SQL Server评测,并运行了问题中列出的delete语句。执行过程耗时3.5分钟。我原以为它会引发其他一些影响POA表的事件,但不是,它只是删除了那些记录

    我再次查看了查询执行计划,发现有很多嵌套循环:

    他们正在查看包含对它的引用的子表(参见右下角插入的树结构中的13个小分支?)。因此,所有的读取都是在索引本身上执行的,而且要花很长时间才能加载到我的uber slow VM上

    最后,我对不同的id运行了相同的查询,它在2秒内运行。然后我尝试了我的单元测试,最后它成功地完成了

    我猜每次尝试删除时,都会启动一个事务,然后CRM上的超时会回滚该事务,从不允许加载子实体索引。因此,我目前的解决方案是确保在实际执行删除之前将子索引加载到内存中。我不知道该怎么做(为每个子实体执行id查询?)

    编辑
    我们有一位微软的性能分析师出来,他们写了一份超过200页的报告。98%的人认为POA表格太长。这非常有帮助。

    您是否执行了在KB中找到的脚本(用于清理POA表)?您是否也尝试过查看长时间运行的查询的执行计划,以查看是否有任何步骤占用了大部分时间?@MarioZG我目前正在运行该脚本。它是作为事务的一部分执行的,大约需要5分钟来处理50000条记录。按这个速度清理需要16天。。。SQL日志中显示为超时的查询不提供任何额外的索引。。。。