医院数据库该怎样进行性能优化维护?.docx_第1页
医院数据库该怎样进行性能优化维护?.docx_第2页
医院数据库该怎样进行性能优化维护?.docx_第3页
医院数据库该怎样进行性能优化维护?.docx_第4页
医院数据库该怎样进行性能优化维护?.docx_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、医院数据库该怎样进行性能优化维护?.docx目录目录1序言21. 数据库主机资源优化与维护31.1. 数据库主机CPU资源32. 2,数据库主机内存资源优化32. 3.数据库主机数据空间资源优化4数据库资源优化与配置52.1. 数据库参数优化53. 1.1.物理内存使用比52. 1.2.设置合理的数据库进程数和游标数53.1.3.数据犀的其他参数和特殊的参数63. 2.数据库分区表维护6数据库维护的性能优化方法有哪些?64. 医院数据库系统SQL语句优化分析74.1. 合理使用索引75.2.SQL语句优化85.2.1.前述85.2.2.LIKE操作符95.2.3.限制返回行95.2.4.UNI

2、ON操作符95.2.5.Between与IN95.2.6.注意细节95.2.7.避免相关子查询105.3.SQL案例分析105.3.1.案例分析一105.3.2.案例分析二115.3.3.案例分析三125.4.小结13参考文献:13一般不要用如下的字句:“V>”,"!=”,“!v”,“NOT”,“NOTEXISTS",“NOTIN",“NOTLIKE”,and"LIKE'%500”,因为他们不走索引全是表扫描。NOTIN会多次扫描表,使用EXISTS.NOTEXISTS,IN,LEFTOUTERJOIN来替代,特别是左连接,而Exists比

3、IN更快,最慢的是NOT操作.如果列的值含有空,以前它的索引不起作用,“<>”,"!=”,"!>”,等还是不能优化,用不到索引。不要在WHere字句中的列名加函数,如Convert,substring等,如果必须用函数的时候,创建计算列再创建索引来替代。还可以变通写法:WHERESUBSTRING(firstname,1,1)='m'改为:WHEREfirstnamelike'm%,(索引扫描),但MIN()和MAX。能使用到合适的索引。select*formZY_FYMXwhereFYDJ>3000分析在此语句中若FYDJ是

4、Float类型的,则优化器对其进行优化为Convert(float,3000),因为3000是个整数,我们应在编程时使用3000.0而不要等运行时让DBMS进行转化。同样字符和整型数据的转换。应改为:select*formZY.FYMXwhereFYDJ>3000.002.7,避免相关子查询一个列的标签同时在主查询和where子句中的查询中出现,那么很可能当主查询中的列值改变之后,子查询必须重新查询一次。查询嵌套层次越多,效率越低,因此应当尽量避免子查询。如果子查询不可避免,那么要在子查询中过滤掉尽可能多的行。5.3.SQL案例分析5.3.1.案例分析一医院数据库容量为28GB,根据对M

5、S.CF01和MS_CF02的大小统计,其中MS.CF02记录条数为1000万条;发药统计时间一个月,耗时30分钟仍然无法得到结果,严重影响正常业务,遂中止。原先统计的SQL语句如下:selectsum(MS_CF02.YPSL*MS_CF02.YPDJ*MS_CF02.CFTS)astotalfromMS.CF01,MS.CF02whereMS_CF01.CFSB=MS_CF02.CFSBandMS_CFO1.CFLX=1and(MS_CFO1.FYBZ=1orMS_CF01.FYBZ=3)andMS_CF01.FYRQ>=”2004.3.100:00:00”andMS_CF01.FY

6、RQv=”2004.3.3000:00:00"andMS_CF01.ZFPB=0根据对系统的分析(仅限于MSSQLServer数据库),给出相应的优化方案,可以在性能上大幅度提高:selecttop1CFSBfromMS.CF01whereFYRQ>=”2004.3.100:00:00"得到该时间段内最小的CFSB,例如3198724selecttop1CFSBfromMS_CF01whereFYRQv="2004.3.3000:00:00"orderbyCFSBdesc/得到该时间段内最大的CFSB,例为4178763selectsum(MS_C

7、F02.YPSL*MS_CF02.YPDJ*MS_CF02.CFTS)astotalfromMS.CFOl,MS.CF02whereMS_CF01.CFSB=MS_CF02.CFSBandMS_CF01.CFLX=landMS_CF02.CFSB>=3198724andMS_CF02.CFSBv=4178763and(MS_CF01.FYBZ=lorMS_CF01.FYBZ=3)andMS_CF01.ZFPB=0所有语句执行完毕后,结果不超过18秒。page5.3.2.案例分析二医院工作人员反映在药库系统自动计划模块执行速度很慢,有时大约需要半个小时才能跳出窗口。经过分析发现,在w_yk

8、_plan.cb_auto.clicked()18行开始的代码如下:ls_select+=nselectYK.TYPK.YPXH,YPMC,YPGG,YPDW,GCSL,DCSL,0”ls_select+="fromYK.TYPK,YK.KCMX”ls_select+="whereXTSB="+string(base_info.syscode)+"andDCSL>0andGCSL>DCSLandYKZF=0”ls_select+=HandYK_TYPK.YPXHnotin(selectYPXHfromYK_KCMX)”ls_select+=&

9、quot;groupbyYK_TYPK.YPXH,YPMC,YPGG,YPDW,GCSL,DCSL“显然是NOTIN语句导致速度很慢,然后把该语句改成:ls_select+=uselectYK_TYPK.YPXH,YPMC,YPGG,YPDW,GCSL,DCSL,0"ls_select+=ufromYK_TYPK”ls_select+="whereXTSB="+string(base_info.syscode)+"andDCSL>0andGCSL>DCSLandYKZF=0“ls_select+=,1andnotexists(selectYP

10、XHFROMYK_KCMXWHEREYK_TYPK.YPXH=YK.KCMX.YPXH)”ls_select+=HgroupbyYK.TYPK.YPXH,YPMC,YPGG,YPDW,GCSL,DCSL“结果5秒内执行完成。5.3.3.案例分析三以下SQL的功能是医院用于作日报时显示哪些收费员还没有做过当天的个人日报,速度非常慢,每次都需要好几分钟才能出来数据。显然这个问题是由于不合理的了查询造成的,经分析后我们把了查询从where子句中去除,语句改成如下后,2秒内数据库出来了。某些HIS系统中病区系统中医嘱提交、医嘱执行、医技提交速度慢问题原因分析ZY.BQYZ这个表中出院数据没有转出到ZY

11、_BQYZ_CY表中。没有建立正确的索引,SQL语句本身存在的问题,在医嘱提交中的WHERE子句:WHERE(ZY.BQYZ.ZYH=ZY.BRRY.ZYHANDZY.BRRY.CYPB=0)AND(ZY_BQYZ.SRKS=:al.hsql)AND(ZY_BQYZ.LSBZ=OORZY_BQYZ.LSBZ=2)AND(ZY_BQYZ.SYBZ=0)AND(ZY_BQYZ.XMLXv4)AND(ZY_BQYZ.YZPB=O)AND(ZY_BQYZ.FYSXv2)AND(ZY_BQYZJFBZ<2)AND(ZY_BQYZ.YSBZ=0OR(ZY.BQYZ.YSBZ=1ANDZY.BQYZ.

12、YSTJ=1)在医院执行模块的数据窗口SQL:SELECTDISTINCTZY_BQYZ.ZYH,ZY_BRRY.BRCH,ZY_BRRY.ZYHM,ZY_BRRY.BRXM,ZY_BRRY.BRXZFROMZY.BQYZ,ZY_BRRYWHERE(ZY_BQYZ.ZYH=ZY_BRRY.ZYH)AND(ZY_BRRY.CYPB=0)AND(ZY_BQYZ.SRKS=:al_hsql)AND(ZY_BQYZ.SYBZ=O)AND(ZY_BQYZ.LSBZ=0ORZY_BQYZ.LSBZ=2)AND(ZY_BQYZ.QRSJ<:ad.todayOR(ZY.BQYZ.QRSJISNULL)A

13、ND(ZY.BQYZ.JFBZ=2ORZY.BQYZJFBZ=9)AND(ZY_BQYZ.XMLX>3)AND(ZY_BQYZ.YZPB=O)ORDERBYZY_BRRY.BRCH5.4.小结从以上这些例子可以看出,SQL优化的实质就是在结果正确的前提下,用优化器可以识别的语句,充份利用索引,减少表扫描的1/0次数,尽量避免表搜索的发生。其实SQL的性能优化是一个复杂的过程,上述这些只是在SQL语句应用时的一种具体实例和平时应用中的总结。总之,数据库的性能优化是一个系统工程,涉及的方面很多。数据库管理员需要综合运用多种方法,认真分析数据库运行过程中出现的各种问题,才能保证数据库高效地运行

14、。5. 参考文献:1 陈倩文.医院数据库系统的性能分析及优化经验J.中国数字医学,2009.4(8):66-68马辰.医院信息系统数据库的性能优化和故障维修J.医疗装备,2009.6:69-70王勇.基于SQL数据库的性能优化问题分析J.电脑知识与技术,2009.15:1004-1007殷美桂.谈关系数据库查询优化方法J.电脑知识与技术,2008.16:1188-1189骆正云,宋念东,俞国霖.医院HIS系统SQLSERVER数据库性能优化J.医疗卫生装备,2005.26(2):32-33刘兆良,陈中举,刘方.SQLSERVER数据库查询优化技术J.科技信息,2007.24:377-3781.

15、 序言确保数据库高效率运行,满足业务响应时限是评估数据库运行状态的重要指标。数据库性能优化在数据库运维过程中占有重要地位,定期对数据库系统进行优化可以延长系统硬件换代周期,提高系统的投资有效性。本文就如何优化大型数据库的性能进行了一些探索,提出了优化数据库访问性能的若干策略,特别是对SQL语句进行了有效的分析设计的问题,以使其加快执行速度,减少网络传输,能更高效地工作,充分发挥系统的效率。随着医院信息系统模块的不断增加,特别是近两年电子病历的使用,临床诊疗信息大量写入数据库,数据量急剧增加,造成业务数据库非常庞大,业务处理的速度明显下降。基于这一问题,本文就如何优化大型数据库的性能进行了一些探

16、索,提出了优化数据库访问性能的若干策略,特别是对SQL语句进行了有效的分析设计的问题,以使其加快执行速度,减少网络传输,能更高效地工作,充分发挥系统的效率。医院经过多年的信息化建设,取得了显著成效,信息化由原来的以收费、记帐为主,逐步向临床医疗、服务病人过渡。随着医院信息系统模块的不断增加,特别是近两年电子病历的使用,临床诊疗信息大量写入数据库,数据量急剧增加,造成业务数据库非常庞大,业务处理的速度明显下降。加之在频繁的业务数据库中还要进行大数据量查询或报表统计,导致在业务处理时经常出现阻塞或死锁现象,严重影响到日常的工作。故如何对数据库性能在进行优化设计,即提高数据库的吞吐量、减少用户等待时

17、间具有重大意义。传统的数据库性能优化主要从操作系统、客户端应用软件程序设计、网络及其它硬件设备等方面来考虑,这种方法只是调整数据库的周边环境,只能暂时缓解问题,而不能从根本上解决问题。实际应用中,更多情况是医院信息系统(包括数据库系统)都已设计好,只是在运行的过程中随着数据规模的增大,使得系统出现周期性性能问题。本文提出的医院数据库系统性能优化是在己有的硬件设施升级、数据库的物理设计、关系规范化等方面进行改进基础之上,对SQL语句进行了有效的分析设计的问题,以使其加快执行速度,减少网络传输,能更高效地工作,充分发挥系统的效率。2. 数据库主机资源优化与维护数据库所在主机的资源是维持数据库正常运

18、行和提供数据库运算的基础资源,主机资源的使用情况和消耗程度从一定程度上能反映数据库运行的状态是否正常、性能是否优秀。因此,对数据库所在主机的资源进行监控和维护也是DBA日常工作必不可少的环节。从以下4个方面来维护和优化数据库主机资源的使用:2.1.数据库主机CPU资源CPU使用率是评价数据库主机CPU资源是否足够的依据,但是更重要的因素是工作载荷。如在数据库主机工作负载高峰期间,80%的CPU利用率可能是正常使用的情况,而在数据库主机工作负载低峰时期,CPU利用率低至20%,这可能是不正常的情况。对于医疗行业的数据库来说,正常上班期间高峰期,CPU负载一般在50%80%是正常的,如果过高则需要

19、考虑进行优化或者增加CPU资源。对于数据库主机而言,CPU资源主要消耗在执行最频繁的SQL语句和I/O上面,一旦发现在数据库中有进程占用过多的CPU资源导致数据库主机CPU资源不足,整体系统响应速度下降,可以考虑从以下几个方面来考虑优化:找到消耗CPU资源最多的数据库进程,通过分析数据库进程的动作一一SQL语句,找到进程消耗CPU的原因并进行优化;增加数据库平台的CPU资源,如果通过优化后仍然发现数据库的运行确实需要较多的CPU资源,可以通过增加CPU扩展数据库平台的节点等方式来增加数据库平台的CPU资源;通过操作系统或数据库的工具来设定数据库对CPU资源分配规则优先级,例如启用系统资源管理器

20、来调整数据库用户的资源分配策略。2.2.数据库主机内存资源优化数据库主机的内存资源大部分都分配给两个部分使用:数据库的高速缓冲区和数据库的连接消耗。内存对于数据库的正常运行至关重要,恰当使用操作系统内存资源,是数据库系统高效运行的必要条件。关注物理内存的使用率,绝大部分操作系统都采用虚拟内存的技术来防止物理内存耗尽、操作系统出现崩溃的情况。但是虚拟内存实质上是机器物理内存加上磁盘上的一块空间(交换区)的总和,操作系统通过一定的机制来处理进程使用的内存段在物理内存和交换区之间的调度。如果系统中频繁地出现物理内存和交换区之间交换,将极大地消耗系统性能,导致系统处于不正常状态。虚拟内存能扩展操作系统

21、总可用内存,但是对数据库主机优化首要关注物理内存的使用情况,因为一旦物理内存即将耗尽,操作系统就会启动交换动作,将物理内存中的数据交换到交换区中,使得数据库使用效率降低。故当数据库主机物理内存使用率超过80%,就需要找出最占用内存的进程,如果不是数据库进程,则需要衡量该进程是否需要常驻操作系统,如果是数据库进程,则要进一步跟踪该进程执行的操作,分析内存占用过大的原因。关注数据库高速缓冲区是否被固定到物理内存中。由于虚拟内存的存在,数据库高速缓冲区则有可能在物理内存占用过大的情况下被交换到交换区中,一旦发生这种情况,数据库的性能会直线下降。因此,必须确保数据库高速缓冲区驻留在物理内存中,在发生物

22、理内存不足的时候,系统只会将用户进程和操作系统其他进程等使用的内存交换到虚拟内存中。2. 3.数据库主机数据空间资源优化数据库主机数据空间优化,主要是指存放数据库文件所在的空间的I/O性能的优化,由于数据库的种类不同,存放数据文件的空间类型主要有:文件系统、裸设备和ASM磁盘组。在数据库空间资源优化中,建议从以下几个方面来考虑:1. 考虑使用SSD来提升I/O性能随着存储技术的发展,SSD磁盘的容量和可靠性己经达到工业化标准的要求,越来越多的存储可以配置SSD磁盘来提升存储整体的I/O性能。通常来讲,SSD磁盘有2种不同的用法:采用SSD做FASTCACHE,成为存储的二级缓存;采用SSD做存

23、储池,利用分层软件将I/O较高的数据放在SSD磁盘上。2. 数据空间尽可能横跨多的物理磁盘目前医疗行业的数据库系统一般都存放在磁盘阵列上,通常来说,磁盘阵列的Raid组中磁盘的数量在48个之间是能获得相对优化的性能,而数据库存放数据文件的空间可以考虑将多个Raid组中划分出来的LUN组成大的数据空间来存放数据,使得数据库的I/O分布在尽可能多的磁盘上来获得较高的I/O性能。3. 数据库资源优化与配置随着数据库技术的发展和版本的更新,数据库本身被设计得越来越智能,数据库本身供DBA能配置和调整的部分是越来越少,很多数据库的配置在安装时候就已经做相对优化的设置。对数据库做一个简单的调整就能大幅度提

24、升数据库性能的情况已经不会发生。当前数据库资源的优化主要着重于数据库初始化配置的优化和数据库的构架优化。3.1.数据库参数优化在数据库参数配置里面,最重要的就是内存参数的配置,因为这部分的配置关系到数据库运行时I/O的性能,故数据库内存参数优化需要注意以下几点:3. 1.1.物理内存使用比每台服务器的物理内存是有限的,但是随着内存技术的发展,内存容量越来越大而价格越来越便宜,现在数据库服务器配置的内存至少都是64G以上。配置数据库占用内存空间的时候,占用最多的就是数据库高速缓存,用于将常用的数据块从磁盘上缓冲到内存中提升数据库整体I/O速度。从原则上来说,数据库高速缓存自然是越大越好,表示越多

25、的数据块能在内存中缓存,但是实际上,服务器内存除了作为数据库缓存以外,还要负责数据库的进程堆栈空间、文件系统缓存、操作系统其他进程来占用。因此,建议配置数据库参数的时候,保持数据库缓存空间占用的内存不超过物理内存的一半即可,然后根据实际的情况来做调整。3.1.2.设置合理的数据库进程数和游标数数据库的最大进程数量表示医院所有的客户端并发能同时开启多少进程来连接到数据库,如果该参数设置过小,就会发生部分进程无法连接数据库的情况,由于大部分数据库修改此参数都需要重启数据库,建议在创建数据库的时候,就根据未来5年以上的数据库规模来配置该参数,以免发生数据库无法连接的故障。数据库的游标其实用于缓存给数

26、据库己经被编译好的SQL代码,如果同一个会话下次执行同样一条SQL语句,就可以从这个缓存的游标中直接执行,从而减少SQL语句的响应时间。通常数据库的游标设置为300500就已经足够,设置过大可能会导致数据库内存中保留过多处于打开状态的游标而内存不足,影响数据库系统的正常运行。3.1.3.数据库的其他参数和特殊的参数数据库的其他参数由于每种数据库都不太相同,但是每种数据库都有关于数据库内部的一些参数。这些参数一般不会出现在公开的技术文档中,有时被称为隐含参数。如果的确需要设置这些参数,都是有原因的。如为了解决数据库系统的bug,强行启动数据库等。对于这些隐含参数,除非你真正知道它的含义和作用(包

27、括副作用),不要轻易去设置它们。3.2.数据库分区表维护在数据库运行过程中,表中的数据量会不断增大,那么查询数据的速度就会变慢,最后反映到应用程序的时候就会显示性能下降。当数据库的数据表数据达到一定程度就应该考虑对表进行分区。表进行分区后,逻辑上表仍然是一张完整的表,只是将表中的数据在物理上存放到多个数据段中,减少查询数据访问的物理块,提高应用程序的响应速度。为数据库建立合理的表分区能为数据库日常使用带来很多好处:改善查询性能,对分区对象的查询可以仅搜索自己关心的分区,提高检索速度;增强可用性,如果表的某个分区出现故障,表在其他分区的数据仍然可用;维护方便,如果表的某个分区出现故障,需要修复数

28、据,只修复该分区即可;均衡I/O,可以把不同的分区映射到磁盘以平衡I/O,改善整个系统性能。在医疗行业的信息化建设初期,数据量非常小,大部分的HIS开发商在对数据库表结构进行设计的时候都没有考虑使用分区表,那么随着近些年HIS数据的暴发性增长,越来越多的医院考虑将核心的业务明细表改造成为分区表来提高数据库响应速度和减少管理维护成本。4. 数据库维护的性能优化方法有哪些?无论是软件开发还是数据库运维,性能优化都是非常重要的一部分,那么数据库运营维护的性能优化方法有哪些呢?下面小编针对SQL数据库为大家介绍数据库优化的主要方法。1、描述SQL数据库的优化主要是使用索引,这样能够避免在查询语句的时候

29、进行全表扫描。2、使用索引要优化查询,尽量避免全表扫描,并考虑对where和orderby中涉及的列进行索引。3、避免判断null值不要将where子句中的字段确定为空值。否则,引擎将停止使用索引并扫描整个表。4、不要在列上进行运算对列进行计算时,会对每一行进行操作,所以最好是禁用索引并扫描整个表。5、左前缀法则当使用索引字段作为条件时,如果索引是复合索引,则必须使用索引中的字段作为条件,并且以确保索引被系统使用,否则将不使用索引,字段的顺序应尽可能与索引的顺序一致。5. 医院数据库系统SQL语句优化分析5.1.合理使用索引提高数据库查询速度最有效的方法就是优化索引。索引是建立在实体表上的一种

30、数据组织,它可以提高访问表中一条或多条记录的查询效率,使用索引的目的是为了避免全表扫描,减少磁盘I/O的次数,加快查询速度,在大型的表中进行索引的建立对加快表的查询有着重要的意义。但是也并不对任何的数据表都要建立索引,索引通常能提高select、update以及delete语句的性能(当访问的行较少时),但会降低insert语句的性能(因为需要同时对表和索引进行插入)。此外,过多的索引会产生维护上的开销,只会降低而不是增加系统的性能,索引的使用要恰到好处。索引使用原则如下:(1)在经常进行连接,但是没有指定为外键的列上建立索引,而不经常连接的字段则由优化器自动生成索引。(2)在频繁进行排序或分

31、组(即进行groupby或orderby操作)的列上建立索引,而频繁进行删除、插入操作的表不要建立过多的索引。(3) 在条件表达式中经常用到的不同值较多的列上建立检索,在不同值少的列上不要建立索引。比如在雇员表的“性别”列上只有“男”与“女”两个不同值,因此就没有必要建立索引,如果在此建立索引不但不会提高查询效率,反而会严重降低更新速度。(4) 如果待排序的列有多个,可以在这些列上建立复合索引(compoundindex)o尽量使用较窄的索引,这样数据页每页上能因存放较多的索引行而减少操作。(5) 在查询中经常作为条件表达式并且不同值较多的列上建立索引,而不同值较少的列上不要建立索引。(6) 当数据库表更新大数据后,删除并重新建立索引来提高查询速度。总之,建立索引一定要慎重,对每个索引建立的必要性都要仔细分析,一定要有建立的依据。过多的索引或不充分、不正确的索引对提升数据库的性能毫无益处。5.2.SQL语句优化5.2.1.前述SQL语言是一种非常灵活的语言,相同功能的实现常可以用儿种不同的语句来表达,但语句的执行效率可能存在很的差别。因此,任何一个数据库应用系统中,合理的对SQL语句进行优化将大大的提高整个数据

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论