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

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

基础数据:

病案首页数据 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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。 O...
    我想起个好名字阅读 5,482评论 0 9
  • 全书的重点在四五六章:如何建表、如何建索引、如何查询。第一章讲解了一些基本概念:锁与事物隔离 重中之重:4.1数据...
    AbrahamW阅读 1,024评论 0 0
  • 第一天 7月13日OCP笔记: Oracle Ocp11g准备资料: OracleFundmentals 书 管理...
    fjxCode阅读 2,845评论 0 4
  • 1.集合有哪些?数据结构?初始长度?扩容机制?哪些是线程安全的?hashmap的底层原理? 集合类型主要有3种:s...
    烂泥lanni阅读 1,625评论 0 1
  • 久违的晴天,家长会。 家长大会开好到教室时,离放学已经没多少时间了。班主任说已经安排了三个家长分享经验。 放学铃声...
    飘雪儿5阅读 7,590评论 16 22