事情发生在Dynamics CRM 8.2.2版本,客户新升级到这个版本几个月的时间。
突然有一天,客户反映为什么我们打开CRM Form页面的时候loading的时间这么长呢?大概会需要5-15分钟呢!并且每一个user的加载时间还不一样 >_<
我第一个反映就是,最近我们没更新环境啊,为什么突然会出现这个问题呢,一定是微软的bug,哼哼。
但冷静下来细想一下,还是需要提供一些东西的,比如如何证明是微软的bug?对此经过一系列推理、诊断、Google后,大概定位了一个方向RecentlyViewedXml的缓存。
或者也可能是网络问题?再或者也可能是DB性能问题?
对于以上几点猜测,于是总结了以下几点检查条件:
1、 让加载慢的User浏览器中输入https://CRMUrl/tools/diagnostics/diag.aspx,点击Run,等待测试结果,这个是对于网络延迟、带宽的诊断
2、 同样让加载慢的User打开加载慢的Entity Form,比如Case,加载完成后按CTRL+Shift+Q,弹出页面中点击Enable后刷新页面,页面再次加载完成后CTRL+Shift+Q,最后Create CSV Report
3、 收集CRM Trace log,为了后续根据CSV中的耗时多的RequestID查Log中对应的SQL之类信息
4、 最后Disable #2打开的form
5、 对于RecentlyViewedXml引起的问题诊断,可以通过浏览器中输入https://CRMUrl/api/data/v8.2/userentityuisettingsset?$ filter=_owninguser_value eq <user guid> and objecttypecode eq <entity object type code>,结果应该只返回5-10个,只看结果个数应该诊断不出来
6、 如果 #5 速度很慢,需要清理DB以及浏览器的local storage,只清一个地方不管用,这俩地方是互相同步的
最后问题的确是由于RecentlyViewedXml导致。这东西是在这里使用的:
从DB看了一下它里面到底存的什么,呵呵,一个大的xml,存了好多东西,每次读取更新,结果真的好惊喜,反正如果是我,我决定不会这么做。
好吧,既然定位了问题所在,接下来就好解决了。
啊,忘记说了,这个RecentlyViewed是UserEntityUISettings表的一个字段。
由于客户CRM DB我们没办法连接,所以通过WebAPI将这个字段内容按照客户需要的过滤条件删掉就可以了。
随便说一嘴,只有自己(包含admin也不可以)才能删除自己的RecentlyViewed数据。
然后删除完之后记得清一下本地浏览器的localstorage缓存,localstorage会跟DB中的数据双向同步!!没想到吧 ^_^