目录[背景] (2)[目标] (2)[性能分析] (2)[优化内容和步骤] (2)[结果检验和日常核查] (4)[注明] (4)[背景]随着医院业务量的增长和所使用信息系统模块的增加,数据库容量增长很快,三级医院保留半年的数据情况下,可以达到25G-30G,且使用模块和接口的数量也在增加,现象是速度明显放慢,操作人员使用不顺畅,影响了窗口正常工作,带来软件性能低下的评价。
硬件方案设计时要考虑承载能力和生命周期;对性能问题的考虑应贯穿于开发阶段的全过程,不应只在出现问题时才考虑性能问题。
[目标]性能调节的目的是通过将网络流通、磁盘I/O 和CPU 时间减到最小,使每个查询的响应时间最短并最大限度地提高整个数据库服务器的吞吐量。
最终通过对性能分析,制定相应的编程规范,引导开发工作,提高产品质量。
[性能分析]分析对象:一、服务器1、处理器:峰值在85%以下2、缓存、内存:达到一个稳定值3、磁盘:检测磁盘错误信息和磁盘空间大小(!!)4、网络:跟踪网络流量二、数据库三、应用程序分析手段方式:1、性能跟踪器:发现服务器性能瓶颈2、检查数据库(使用dbcc工具):是否是数据库对象错误引起3、SQL SERVER Profiler:跟踪软件后台脚本性能,通过统计分析语句问题4、主业务程序单元运行调试5、其他跟踪分析工具[优化内容和步骤]一、硬件配置1、硬件性能降低原因(1)资源不足,并且需要附加或升级的组件;局部硬件存在瓶颈(2)资源共享工作负载不平均,需要平衡。
(3)资源出现故障,需要替换。
(4)资源不正确,需要更改配置设置。
2、解决办法(升级的量级待定?)(1)服务器升级硬件配置或增加服务器,更改软件配置(2)升级网络设备,或更改逻辑结构(3)客户端升级硬件配置二、软件优化1、配置优化1)负荷分摊:不同系统的数据库分开配置服务器。
坚持将决策支持和联机事务处理(OLTP) 查询混在一起2)服务配置:(1)命名管道与TCP/IP的使用;(2)SQL Server 内存分配设置(3)最大化吞吐量:是否需要配置连接数量(4)配置虚拟内存:配置合适的值,SQL Server最多能利用2GB虚拟内存,当给SQLServer分配的虚拟内存多于可用的物理内存时,会降低SQL的性能(5)使用哪种类型的磁盘硬件,如 RAID(独立磁盘冗余阵列)设备。
(6)如何将数据放置在磁盘上:怎样放置文件组(7)如何适当设置数据库的所有配置参数以使数据库很好地运行:例如简单日志等3)缩减数据库:导出数据到历史库、年表,收缩数据库;尽可能减少日表数据和正式库数据4)优化tempdb 性能,合理配置文件增长比,初始化大小防止频繁扩展。
对于日志文件放到单独的磁盘上,定期清理日志文件。
2、程序优化1)适当修改索引:针对我们程序读写特点,增加或减少索引,通过跟踪执行计划分析。
2)重建索引3)优化处理流程,单元处理流程,和业务处理流程4)修改SQL语句:(1)能用表的就不用试图,视图中多用静态表(2)无须用年表的就不要关联年表(3)多表关联时可以考虑分步骤关联(4)只在必要时才使用游标(5)不要使用SELECT *(6)不要给“性别”列创建索引(7)使用适当的事务,尽可能简短(8)不要使用INSERT导入大批的数据(9)在细节表中插入纪录时,不要在主表执行SELECT MAX(ID)(10)尽量不要使用TEXT数据类型(11)tempdb的使用规范:i. 尽量避免使用distinct、order by、group by、having、join、cumpute,因为这些语句会加重tempdb的负担。
ii. 避免频繁创建和删除临时表,减少系统表资源的消耗。
iii.在新建临时表时,如果一次性插入数据量很大,那么可以使用select into代替createtable,避免log,提高速度;如果数据量不大,为了缓和系统表的资源,建议先createtable,然后insert。
iv. 如果临时表的数据量较大,需要建立索引,那么应该将创建临时表和建立索引的过程放在单独一个子存储过程中,这样才能保证系统能够很好的使用到该临时表的索引。
v. 如果使用到了临时表,在存储过程的最后务必将所有的临时表显式删除vi. 慎用大的临时表与其他大表的连接查询和修改,减低系统表负担,因为这种操作会在一条语句中多次使用tempdb的系统表。
(12)用exists替代in ,可以提高查询的效率(13)通过使用存储过程,可以将网络往返减到最小,存储过程中使用SET NOCOUNT 可以减少返回给客户端的消息操作;使用小结果集返回;(14)使用Prepared Execution 来执行参数化SQL 语句增加速度(15)单个存储过程中处理分支不宜过多!5)修改前台处理过程(1)避免重复执行的程序:窗体、数据等,增加利用率(2)减少频繁和数据库进行交互三、管理优化我们在讨论软硬件优化的同时,医院管理上也要配合计算机来实现性能优化。
通过规范使用时间和权限减少系统负担;建立完善的跟踪机制,能提供完整的资料和快速定位客户端,便于问题跟踪。
[结果检验和日常核查]对优化后的结果进行检验,证明优化的有效性和程度,为下一次优化提供参考数据。
对数据库性能跟踪应该定期执行,积累日常数据,防范于未然。
[注明]附:一、性能跟踪计数器的可接受值资源对象\计数器建议的阈值注释磁盘Physical Disk\% Free Space Logical Disk\% Free Space15%磁Physical Disk\\% Disk Time 90%盘Logical Disk\% Disk Time磁盘Physical Disk\DiskReads/sec、PhysicalDisk\Disk Writes/sec取决于制造商的规格检查磁盘的指定传送速度,以验证此速度没有超出规格。
通常,UltraWide SCSI 磁盘每秒可以处理 50 到 70 次 I/O 操作。
磁盘Physical Disk\Current DiskQueue Length主轴数加 2这是即时计数器;观察在多个间隔上的值。
对于随时间变化的平均值,请使用 Physical Disk\ Avg.Disk Queue Length。
内存Memory\Available Bytes 少于 4 MB 考察内存使用情况在需要时添加内存。
内存Memory\Pages/sec 20 研究页交换活动。
页面文件Paging File\% Usage 70% 以上与 Available Bytes 和 Pages/sec 一起复查该值,了解计算机的页交换活动。
处理器Processor\% Processor Time 85%查找使用处理器时间高百分比的进程。
升级到更快的处理器或安装其他处理器。
处理器Processor\Interrupts/sec取决于处理器;每秒1000 次中断是好的起点此计数器的值明显增加,而系统活动没有相应的增加则表明存在硬件问题。
标识导致中断的网卡。
可能需要安装额外的适配器或者控制器卡。
服务器Server\Bytes Total/sec如果所有服务器的 Bytes Total/sec 和与网络的最大传送速度大致相等,则可能需要将网络分段。
服务器Server\Work Item Shortages 3如果值达到该阀值,请考虑将 DWORD 项“InitWorkItems”(在启动期间分配给处理器的工作项数)或者MaxWorkItems(服务器可以分配的接收缓冲区的最大数)添加到注册表(在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters 下面)。
InitWorkItems的范围可以是从 1 到 512,同时MaxWorkItems的范围可以是从 1 到 65535。
以InitWorkItems的任何值以及MaxWorkItems的值 4096 开始,并一直加倍这些值直到 Server\Work Item Shortages 阀值低于 3。
有关修改注册表的信息,请参阅注册表编辑器帮助。
小心•编辑注册表不当可能会严重损坏您的系统。
在更改注册表之前,应备份计算机上任何有价值的数据。
服务器服务器\分页池峰值物理 RAM 的数量此值是最大页面文件大小和物理内存数量的指示器。
服务器Server Work Queues\QueueLength4如果值到达此阈值,则可能存在处理器瓶颈。
这是即时计数器;观察在多个间隔上的值。
多个处理器System\Processor QueueLength2 这是即时计数器;观察在多个间隔上的值。
二、硬件配置参照(一)在选择服务器时关注的参数(针对三级医院最低默认值):1、处理器:2、缓存、内存:3、磁盘:4、网络:(二)配置方案:。