一个设置实体扩展字段数据来源引发的效率问题

by limingk 2016.1.8 10:47

注:脚本执行有风险,对于客户正式环境请在研发指导下执行。

刚处理的一个支持问题,客户在月底做汇兑损益的时候卡死,本来只要5分钟就能完成的汇兑损益,这次半小时还没做完。

检查的时候先进入数据库看正在阻塞的事务,发现有个事务用时特别长,而且不停的在执行如下的脚本,只是ID值和code值不同

select  A.[DescFlexField_PrivateDescSeg18] from  CBO_ItemMaster as A  left join [Base_Organization] as A1 on (A.[Org] = A1.[ID]) where  ((A.[Segment1] = '410502000499') and (A1.[Code] = '01'))

经过重启iis然后时间对比,发现这个事务确实是汇兑损益的,但是汇兑损益没有操作CBO_ItemMaster 表,为什么会一直做这个操作?

按照SPID kill掉之后发现报错日志

UFSoft.UBF.Business.EntityDataQuery.FindDataReader(String condition)

   UFIDA.U9.Base.FlexField.DescFlexField.DescFlexSegments.ProcessFlexDataSourceExpr(DescFlexFieldDef def)

   UFIDA.U9.Base.FlexField.DescFlexField.DescFlexSegments.Custom_Validate()

   UFIDA.U9.Base.FlexField.DescFlexField.DescFlexSegments.OnValidate()

   UFIDA.U9.AR.ARBill.ARBillLine.SelfEntityValidator()

 

咨询马杰之后知道这个应该是跟实体扩展字段数据来源表达式有关,然后发现客户果然配置了应收单行的实体扩展字段数据来源表达式,这个表达式会在每次实体的 SelfEntityValidator()方法中执行,当这个扩展字段值为空就会通过表达式取值。客户这个表达式应该是新加的,而且客户的CBO_ItemMaster 表记录特别多,有130多w,并且系统是不会自动增加扩展字段的索引,所以导致了效率问题。

解决办法:增加对应的索引,增加后执行时间变成7分钟左右,问题解决



Tags:

评论 (1) -

Collette 美国 wrote at 2016/2/26 18:45:46 #

Las fotografías importadas se ordenan automáticamente por data, y en todos y cada página se muestran entre una y 5 fotos.

添加评论



biuquote
微笑得意调皮害羞酷大笑惊讶发呆喜欢可怜尴尬闭嘴噘嘴皱眉伤心抓狂呕吐坏笑漫骂发怒
Loading


RecentComments

评论 RSS

Statistics

989 篇文章
0 个单页
653498 条评论
11 次评分
233754 次访问
访问统计开始于 2019年12月15日
平均日访问 5436 次
当前 94 人在线