记一次Dynamics CRM Audit 查询失败的问题。

客户环境现象:由于业务逻辑需要使用RetrieveAuditDetailRequest API查询相关Record的详细更改信息。但查询过程中偶尔会出现失败的情况,出错原因提示是

System.TimeoutException: 'The request channel timed out while waiting for a reply after 00:01:59.9929956. Increase the timeout value passed to the call to Request or increase the SendTimeout value on the Binding. The time allotted to this operation may have been a portion of a longer timeout.'

很明显,超时了。

那么为什么会出现超时呢?

第一感觉:会不会是因为Audit表被占用了,导致长时间等待出现超时的呢?但经过通过sp_who2排查后发现并没有block的sql。

那会不是是因为网络原因导致的呢?随后使用内网在页面上打开Record的Audit时同样失败,排除。

看一下Audit数据量有多少吧?一看,好家伙,一千多万的数据量,10多个分区表。那会不会是因为索引重建失败导致查询过慢而失败的呢?

因为Dynamics CRM默认每天都会使用Microsoft Dynamics CRM Asynchronous Processing Service (maintenance) service 执行一次p_ReindexAll的操作。

执行时间同样默认一个表会限制在2min内,详细信息见http://soluciones-microsoft.blogspot.com/2018/07/how-to-improve-microsoft-dynamics-365.html

于是看一下job执行的记录,发现根本没有。怎么可能,继续看Config DB中是不是有人动过执行maintenance的schedule,

Select NextRunTime,RecurrenceStartTime,*
from MSCRM_CONFIG.dbo.ScaleGroupOrganizationMaintenanceJobs
where OperationType = 30

果真,已经被更新为不执行maintenance job了。

陷入僵局...

诶,看一下RetrieveAuditDetailRequest内部都会干些什么吧。于是本地环境使用Sql Server Profile抓了下Sql语句,嘿嘿,这货竟然会这样实现:

1、通过Audit Id将AuditBase表中的数据查询出来。

2、通过Audit 中的Object Id将Record数据查出来。

3、通过Audit 中的ChangeData将所有ChangeData中的Id每一个组成一条sql查询出来。

重点在#3,我们一个ChangeData中的Id足足有几万条诶。终于找到具体原因了,大量的sql语句导致查询时间过长而timeout。

介于时间以及整体的稳定性考虑,暂时将连接Dynamics的OrganizationServiceProxy中的Timeout Property设置为30分钟解决。

但是这么做并不能治本,因为页面上的Audit依然会有问题,这该如何解决?客户数据是万万不能删除的。如果有大神知道,麻烦评论区告知,感激~~

Dynamics CRM Audit Performance Troubleshooting的更多相关文章

  1. Microsoft Dynamics CRM 2015 and Microsoft Dynamics CRM 2016 Performance and Scalability Documentation

    摘要: 本人微信公众号:微软动态CRM专家罗勇 ,回复285或者20181126可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!我的网站是 www.luoyong.me ...

  2. Dynamics CRM Performance Issue when CRM Forms Opening

    事情发生在Dynamics CRM 8.2.2版本,客户新升级到这个版本几个月的时间. 突然有一天,客户反映为什么我们打开CRM Form页面的时候loading的时间这么长呢?大概会需要5-15分钟 ...

  3. 在VM虚拟机上安装Microsoft Dynamics CRM 2016 步骤图解及安装注意事项

    安装Dynamics CRM 2016环境配置要求: 系统版本:Windows Server 2012 R2(必须) SQL 版本: SQLServer2014SP1-FullSlipstream-x ...

  4. 利用Azure虚拟机安装Dynamics CRM 2016实例

    关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复181或者20151215可方便获取本文,同时可以在第一时间得到我发布的最新的博文信息,follow me! Dynamics CRM Ser ...

  5. Microsoft Dynamics CRM 2011 安装完全教程

    作者:卞功鑫,转载请保留.http://www.cnblogs.com/BinBinGo/p/4302612.html 环境介绍 WINDOWS 2008 R2 Datacenter Microsof ...

  6. Dynamics CRM early binding and late binding

    The key advantage of late bound entity classes is that customer entities and attributes not avaliabl ...

  7. Dynamics CRM 2016 Web API 消息列表

    Function Name Description CalculateTotalTimeIncident Function Calculates the total time, in minutes, ...

  8. Dynamics CRM 在表单上显示更改历史记录(审核历史记录)

    前言 虽然Dynamics CRM自带的审计很好,但是对于缺乏使用CRM经验的用户来说,自带的UCI界面实在是太隐藏了: 于是乎就出现了需求:想通过在表单上直接看到看审计历史记录: 在网上搜索了很多中 ...

  9. Dynamics CRM 2015-超大Solution导入问题

    我们在将比较大的solution导入CRM的时候,经常会遇到超时的问题,这是因为CRM的本身的优化限制导致的,那么如何解决呢? 官方已经有了解决方案了. 在浏览完两种解决方法之后,我们要知道的是: 1 ...

随机推荐

  1. TensorFlow从0到1之TensorFlow实现单层感知机(20)

    简单感知机是一个单层神经网络.它使用阈值激活函数,正如 Marvin Minsky 在论文中所证明的,它只能解决线性可分的问题.虽然这限制了单层感知机只能应用于线性可分问题,但它具有学习能力已经很好了 ...

  2. TensorFlow从0到1之TensorFlow优化器(13)

    高中数学学过,函数在一阶导数为零的地方达到其最大值和最小值.梯度下降算法基于相同的原理,即调整系数(权重和偏置)使损失函数的梯度下降. 在回归中,使用梯度下降来优化损失函数并获得系数.本节将介绍如何使 ...

  3. cb41a_c++_STL_算法_填充新值fill_generate

    cb41a_c++_STL_算法_填充新值fill_generatefill(b,e,v)fill_n(b,n,v),填充n个vgenerate(b,e,p)generate_n(b,n,p) gen ...

  4. 【K8s学习笔记】K8s是如何部署应用的?

    本文内容 本文致力于介绍K8s一些基础概念与串联部署应用的主体流程,使用Minikube实操 基础架构概念回顾 温故而知新,上一节[K8S学习笔记]初识K8S 及架构组件 我们学习了K8s的发展历史. ...

  5. 【漏洞二】Apache HTTP Server "httpOnly" Cookie信息泄露漏洞

    [漏洞] Apache HTTP Server "httpOnly" Cookie信息泄露漏洞 [原因] 服务器问题 Apache HTTP Server在对状态代码400的默认错 ...

  6. 31_栈的分类.swf

    栈的分类: 栈可以分为静态栈和动态栈 静态栈:要删除先删除4才能删除3,以数组为数据结构 动态栈:以链表作为数据结构,在实际中使用动态栈比较多

  7. VulnHub CengBox2靶机渗透

    ​本文首发于微信公众号:VulnHub CengBox2靶机渗透,未经授权,禁止转载. 难度评级:☆☆☆☆官网地址:https://download.vulnhub.com/cengbox/CengB ...

  8. python基础扩展(二)

    python基础扩展(二) 常用操作 1.startswith(以什么开始) endswith(y)什么结束 s='taiWanw39dd' print(s.startswith('t')) #意思是 ...

  9. android studio gradle的坑

    国产模拟器别国外的好用.非常傻瓜.有人推荐夜神. 之前用geom,下载Android都得半天.     每次做开发前,配置环境都要搞半天.尤其是想快速学习一个技术的话,光装环境都让人放弃了.最近想看一 ...

  10. CSS背景颜色透明

    { filter:alpha(opacity=50); -moz-opacity:0.5; -khtml-opacity: 0.5; opacity: 0.5; } 兼容大部分主流浏览器 filter ...