美文网首页
1.项目中遇到的难点及解决思路

1.项目中遇到的难点及解决思路

作者: Junma_c631 | 来源:发表于2020-11-26 15:57 被阅读0次

项目中比较棘手的性能问题解决:

基础数据:

病案首页数据 20万*12 约等于 2000万

费用信息:20*8*12  约等于1.6亿.

诊断信息:20*2*12

手术信息  10*12 

性能要求 :抽数、质控加分组两个小时。

实际跑出来:8个小时没跑完。

定位问题:查询oracle正在执行的sql和执行耗时最长的sql定位到存储过程中一条sql。

分析原因:

  1.查询临时表空间、表空间资源情况是否用完

  2.查询undo、redo资源

  3.查询cpu 。

  4.分析awr报告

最终定位到:cpu在运算时达到90%以上,awr显示大量的IO等待。

经过分析最终敲定是因为该条sql导致IO过重,因为该条sql采用update加子查询的形式,子查询中做做了大量的运算。

初步解决性能问题:

  因为项目验收时间紧迫,所以做了个初步方案。

  update语句拆分,通过oracle中的游标进行循环更新,把能够合并的更新逻辑,在遍历游标时合并更新,最终勉强达到性能要求。

最终解决方案:

  废弃质控对应的存储过程,质控逻辑在代码中实现,建立质控规则库,通过drools规则引擎去校验每条病案数据违反了哪条质控规则,每次质控完成放入队列,

  重新开一个线程去队列中获取质控后的病案进行分组。

  这样做的好处:

  第一:通过规则引擎技术,可以随意添加质控规则,只需维护规则脚本即可,实现代码质控规则的解耦合,原来的质控规则是通过sql运算出来的,每次新增规则,需要改sql,sql可读性也很差,

  该起来也费劲。

  第二:规则引擎是在内存中计算,提高了质控的性能标准。

  第二:通过异步编程,运用java队列,质控一条病案就立即去分组,改善代码性能。

-- 中华石杉面试要点

https://gitee.com/shishan100/Java-Interview-Advanced

相关文章

网友评论

      本文标题:1.项目中遇到的难点及解决思路

      本文链接:https://www.haomeiwen.com/subject/xgqzsktx.html