数据库优化案例—某市中心医院HIS系统

这篇具有很好参考价值的文章主要介绍了数据库优化案例—某市中心医院HIS系统。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

记得在自己学习数据库知识的时候特别喜欢看案例,因为优化的手段是容易掌握的,但是整体的优化思想是很难学会的。这也是为什么自己特别喜欢看案例,今天也开始分享自己做的优化案例。

  最近一直很忙,博客产出也少的可怜,今天整理了一下自己做过优化或各种方案的客户已经超过100家了,今天分享的案例算是在这些客户中比较典型的了!没有什么高大上都是常见的问题!在之前的博客中都有过提及,那么本篇我们就结合之前的技术点来看看这个案例。学习优化手段的看官们可以参见我的优化系列:

系统环境

  首先我们来看一下这个系统配置及现状,为什么说这个客户经典?那就是因为这个客户已经达到可以慢的地方都慢,不该慢的地方也慢!

  首先这是一套医院的HIS系统,慢到什么程度呢?各种功能卡死不管是交款、医嘱、开药一些列几乎所有的功能都慢。但是卡慢的现象只出现在上午的高峰期!

  先来看看系统配置 :

 

数据库优化案例—某市中心医院HIS系统

 

数据库优化案例—某市中心医院HIS系统

 

 

数据库优化案例—某市中心医院HIS系统

 

  数据库版本是SQL SERVER 2008R2,数据量大概1个多T,服务器64CPU 、128G内存,服务器只运行数据库。

  咋一看服务器确实有点老了,数据量也大了,内存和CPU什么的明显不够用了!

数据库指标

  那么我们再看一下数据库的一些表象:

  每秒请求数量:

 

数据库优化案例—某市中心医院HIS系统

 

  语句执行情况:

 

数据库优化案例—某市中心医院HIS系统

 

  等待情况:

 

数据库优化案例—某市中心医院HIS系统

 

  等待时间:

 

数据库优化案例—某市中心医院HIS系统

 

   CPU指标:

 

数据库优化案例—某市中心医院HIS系统

 

  内存一些指标:

 

数据库优化案例—某市中心医院HIS系统

 

  

磁盘队列:

 

数据库优化案例—某市中心医院HIS系统

 

 -------------------还很多指标就不一一展示了------------------

   看到这些基本的指标,除了慢你能看出什么?问题出在哪里?怎么样快速解决?能有一个优化的步骤呈现在眼前么?

优化阶段一(常规优化)

  很多时候系统慢要究其原因,难道上线时候就这么慢?那不可能,厂商根本无法交付的!那么问题来了,什么时候开始慢的?对系统做过哪些调整?

  简单的调研开始...给我的只有不到半天的调研时间...得知的基本问题就是系统在最近一月增加了很多功能,有上线了很多其他系统接口!

  那么直接就搞新功能、新程序接口语句? 我认为并不是这样,从一名数据库从业人员来说,看到这样的系统一定要先解决大面积等待问题!个人经验来看很多系统大面积等待解决系统会有个很大的提升和改善!

  配合一些常规的调优手段阶段一开始了,主要给系统大面积创建影响高开销大的索引,调整系统参数,优化tempDB、开启快照读等....具体不细说了,前面系列文章中都有!

 

  预期:

  一般系统上面一轮优化会有明显的改善,我认为这一轮以后系统会明显变快,语句CPU会下降到70%左右,内存压力也会有所减少。

  结果:

  自信满满的我第二天去了各个科室....部分功能依然超时还是各种慢...CPU依然90%以上,内存压力依然明显。但是收集的数据来看,长时间语句数量已经大幅降低,系统等待阻塞情况也明显好转。

    优化前

 

数据库优化案例—某市中心医院HIS系统

 

  优化后

 

数据库优化案例—某市中心医院HIS系统

 

  优化前

 

数据库优化案例—某市中心医院HIS系统

 

  优化后

 

数据库优化案例—某市中心医院HIS系统

 

优化阶段二(针对语句)

   再次分析解决大面积语句阻塞的系统,发现现在的情况,主要有如下几个:

  1. 由于内存不足导致的IO压力。
  2. 系统CPU依然彪高。
  3. 部分功能语句依然慢,消耗的资源很高。

  再次对系统调研:

  1. 哪些功能慢,执行的语句是什么。
  2. 系统的接口语句问题。
  3. 系统中还有哪些消耗资源高的语句,是否能优化。  

  

  调研后,我遇到了最常见也是最大的问题: 语句慢由于程序!很多人看到这会说程序慢就改呗,那有啥问题? 问题就在于你来做优化直接了当的和人家开发人员说你程序太烂必须改!如果你是程序开发人员你会有什么样的反应?

  他会说:对不起,影响太大改不了!

  那么这个优化项目黄了,或者你要付出更大的代价绕过这样的问题。

 

   分析中发现程序使用了大量各种自定义函数,有一定经验的人都应该知道,语句在筛选的列上使用函数是没有办法使用索引查找的,这样相对于这种单表数据就几百甚至几千万的表,是何等的灾难!但是不能冒然突出修改程序,那还能怎么优化呢?大概分析后得出结论,程序主要消耗在几部分:

  1. 部分业务功能语句慢。
  2. 接口语句慢(主要是视图,供其他程序调用)。
  3. 还有报表程序。

 

  针对第一部分在不能改程序的情况下,尝试添加计划向导改变语句执行情况;

  针对第二部分修改接口视图,包括替换掉函数、添加索引等;

  针对第三部分报表这东西不是短期就可以优化的,所以再原有镜像的方案上添加快照,实现了简单的读写分离,直接分走;

  

  语句优化的效果:

  优化前

 

数据库优化案例—某市中心医院HIS系统

 

  优化后

数据库优化案例—某市中心医院HIS系统

  优化前

 

数据库优化案例—某市中心医院HIS系统

 

  优化后

 

数据库优化案例—某市中心医院HIS系统

 

   预期:

  90%消耗高的语句都得到了优化,系统应该可以快起来了,CPU、内存指标也应该正常了!

   结果:

  语句的消耗和时间都降下来了,系统卡慢现象有明显好转,但是CPU依然90%以上、内存压力依然明显,磁盘队列还是很高!系统性能问题依然存在。

优化阶段三(深入指标分析)

  经过前两个阶段的优化一般系都会明显好转,并且指标正常,这也是前面提到的可以慢的地方慢已经解决,那么为什么CPU、内存压力没有缓解?难道真的是64CPU、128G内存不能支持了?需要加内存换CPU?难道要做负载均衡?各种拆分?

CPU分析

  首先我对CPU压力进行了分析,综合语句的CPU消耗和CPU的表象来看,很大一部分应该不是语句执行消耗的!那么服务器上确实也没有跑其他程序,CPU资源哪里去了?

  看看这个计数器:

 

数据库优化案例—某市中心医院HIS系统

 

  SQL的编译次数高峰时间段达到每秒2000多次!很多书上写过,相信很多看官也知道,语句不参数化会给CPU造成压力,这就是个鲜活的例子!那么解决办法也是比较粗暴,程序无法修改那么就在数据库上开启强制参数化。

  看下效果:

 

数据库优化案例—某市中心医院HIS系统

 

数据库优化案例—某市中心医院HIS系统

   我想不用多说什么了!

内存分析

  看到了CPU的现象那么内存的问题也有眉目了,这么多编译即席查询,首先看一下内存中缓存了那些数据:

 

数据库优化案例—某市中心医院HIS系统

 

  SQLOPTIMIZER Singlepage占到了80多个G,而在查询数据页的缓存只有20个G,而且仍然在被不断压缩,那么内存没压力就怪了!这个SQLOPTIMIZER Singlepage尝试了一下是无法通过DBCC FREExxxxx的操作释放的,所以在半夜直接重启了SQL 服务!将近2年没有重启的SQL服务就这么折在我的手里了!

   重启后页生命周期:

数据库优化案例—某市中心医院HIS系统

  内存这个问题,不知道是不是微软的一个小BUG,查询计划的缓存个人理解不会一直压榨数据缓存的,客户的数据库没有补丁,但是查阅08的各个补丁也没有找到相关问题的修复。

  也请遇到过或了解的朋友给点提示!

 

  预期:

  语句已经优化,阻塞情况也被解决,CPU、内存、磁盘压力也没有了,系统肯定快起来了!

  结果:

  系统快起来了!

 

  总结 : 文章只是简单的描述了一下某医院HIS系统的优化过程,当然一周的工作仅仅通过一篇文章写出全过程细节必然不那么详尽,还望看官们见谅!

      整个的优化过程是程序只修改了2条语句,其他都是通过数据库优化手段完成。而且没有添加任何硬件资源!

优化过程主要分为:文章来源地址https://www.toymoban.com/news/detail-450393.html

  1. 系统整体调研 :和科室用户沟通慢的情况,系统最近变更情况,并收集数据。
  2. 常规优化 : 调整数据库参数配置,添加索引,解决阻塞。
  3. 再次调研:系统慢功能,慢语句。
  4. 针对语句优化:写法不足,是否缺失索引,是否能加提示、计划向导等
  5. 整体压力是否缓解:如果仍然压力很大找到瓶颈,是否可以解决?如果不能解决才考虑添加硬件或选用分离、分离等方案。

到了这里,关于数据库优化案例—某市中心医院HIS系统的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 医院核心数据库一体化建设实践

    “以数据为核心资源的数字化时代,正在成为引领和推动新一轮科技革命的核心力量,将会深刻影响卫生健康行业。” 这是四月份发布的《公立医院运营管理信息化功能指引》中对数据重要性的描述。数据库作为数据的载体,支撑着整个业务系统,发挥着非常重要的作用,被

    2023年04月24日
    浏览(44)
  • 医院管理系统数据库,课程设计,SQLserver,纯代码设计

    首先创建数据库,并建立各个表之间的主外键约束等,并插入数据。 此时数据库已经建立好了,下面进行数据库的基本操作。 下面是各个表的实体图        下面是数据流图  下面是医院管理E-R图 下面是医院功能结构图 随着计算机技术的飞速发展,计算机在医院管理中应用

    2024年01月16日
    浏览(34)
  • 基于微信小程序的医院预约挂号系统,附源码、数据库

    博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W+、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ Java基于小程序的医院预约挂号小程序 系统主要功能可以分为后台管理功能和前台的小程序展示功能,主要功能如下

    2024年02月04日
    浏览(45)
  • 小型医院医疗设备管理系统|基于springboot小型医院医疗设备管理系统设计与实现(源码+数据库+文档)

    小型医院医疗设备管理系统目录 目录 基于springboot小型医院医疗设备管理系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、职员信息管理 2、设备信息管理 3、库房信息管理 4、公告信息管理 四、数据库设计 1、实体ER图  五、核心代码  六、论文参考 七、最新计

    2024年02月21日
    浏览(44)
  • 基于springboot的微信小程序宠物领养医院系统(源代码+数据库+10000字论文)085

    本项目有网页版和小程序端 本系统分为管理员、医生、用户三种角色 用户角色包含以下功能: 登录、注册、宠物领养、医生在线咨询、查看挂号、个人中心、密码修改、宠物寄养查看 医生角色包含以下功能: 登录、查询挂号、在线回复、挂号、挂号查询处理、个人中心、

    2024年02月13日
    浏览(35)
  • JAVA毕业设计104—基于Java+Springboot+Vue的医院预约挂号小程序(源码+数据库)

    本系统前后端分离带小程序 小程序(用户端),后台管理系统(管理员,医生) 小程序: 预约挂号,就诊充值,充值记录,医生排班,挂号记录,就诊人信息,我的收藏,我的评价。 管理后台: 预约挂号信息管理,科室信息管理,门诊信息管理,医院排班信息管理,黑名

    2024年02月08日
    浏览(35)
  • 基于Springboot+Vue的医院hrp物资管理系统(源代码+数据库+16000字论文)066

    本系统分为管理员、医院、供应商三种角色 供应商角色包含以下功能: 注册登录、个人中心、招标信息管理、合同签订管理、产品信息管理、采购订单管理、订单配送管理、条码维护管理、查看招标公告、密码修改 医院角色包含以下功能: 注册登录、个人中心、密码修改、

    2024年02月16日
    浏览(22)
  • 数据库优化(数据库自身的优化,数据库表优化,程序操作优化)

    1. 增加次数据文件 从SQL SERVER 2005开始,数据库不默认生成NDF数据文件,一般情况下有一个主数据文件(MDF)就够了,但是有些大型的数据库,由于信息很多,而且查询频繁,所以为了提高查询速度,可以把一些表或者一些表中的部分记录分开存储在不同的数据文件里 由于C

    2024年02月14日
    浏览(29)
  • java 宠物医院系统Myeclipse开发mysql数据库web结构jsp编程计算机网页项目

    一、源码特点     java 宠物医院系统是一套完善的java web信息管理系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql5.0,使用java语言开发。 java Web 宠物医院管理系统1 下载地

    2024年02月20日
    浏览(32)
  • JAVA毕业设计097—基于Java+Springboot+Vue+uniapp的医院挂号小程序系统(源码+数据库)

    本系统前后端分离(网页端和小程序端都有) 本系统分为管理员、医院、用户三种角色(角色菜单可自行分配) 用户功能: 注册、登录、医院搜索、最新资讯、医生搜索、挂号预约、挂号记录、我的就诊人、反馈、我的收藏、账号管理 医生功能: 挂号管理 管理员功能: 角色管

    2024年02月09日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包