数据库是信息系统中核心的部分,数据库的高效性、安全性、稳定性、延展性,是项目成功的关键之一。一个好的数据库系统,设计当然是关键,但是就像显微镜的粗调和微调,当软件开发完成后,通过不断的对系统的跟踪监控,对数据库系统进行优化也是必不可少的。可以认为优化是数据库设计的一种顺延,和设计是相辅相成的。数据库的优化实际上从设计、数据库的安装就已经开始了,我们不应该就sql语句的效率孤立的谈论数据库的优化问题。实际上很多数据库优化的经验,在设计的时候就必须要考虑。
本文首先谈了一下和性能优化有关的基本概念,之后分六个方面详细讨论了数据库优化的方法、手段。在数据库的监控部分讲述了为什么?什么时候?如何监控数据库,并给出了一些可以直接使用的简单sql,用来直接分析某些方面的问题。从始至终,贯穿了一个实际的例子帮助读者能更好的理解有关理论。由于使用了多个工具参与优化工作,文中对每种工具的使用技巧做了简单提示。本文用到的例子是作者前不久遇到的一个项目,操作系统是DIGITAL ES20(True64UNIX),硬件配置为 520M内存,单cpu,单SCSI硬盘。这里只提一下大概的性能和功能要求:系统要求能在短时间内,导入5、6百万条的记录、部分数据需要手工录入。录入的记录进行处理后,被处理后产生各种报表,并且报表很可能发生变化。本系统在使用了一段时间后,发现性能严重下降,生成报表和数据导入都需要很长时间,通过优化将响应控制在了可以忍受的范围。
1 性能优化有关的基本概念
1.1 响应时间
数据库是否高效的一个重要指标就是响应时间,响应时间短,查询就可以使用更少的时间,所以响应时间短,反应速度快是高效率的一个表现,这里有一个统计的数据。
Ø 1/10秒是用户认为系统能够立即反应的极限
Ø 1 秒是用户觉得没有被中断的极限
Ø 10秒是用户能将注意力继续集中在与计算机的对话上的时间极限
引用自Jakob Nielsen 的“Usability Engineering”第五章(Morgan Kaufmann, San Francisco出版)
简单的说,数据库优化就是要缩短系统的响应时间。
1.2 数据库的增长
数据库不是静止不动的,应用程序的螺旋式展开,数据库的规模的不断增大,用户数目的不断增多,最终将会导致响应时间的增加。虽然期间经过硬件的升级和数据库的优化,可以降低响应时间,但是在整个产品周期内,响应时间是会周期性展开的,有一个总体的发展趋势.
在数据库的设计阶段,就应该估算数据库的增长率,并作为系统硬件参数、内存参数、数据库空间配置参数、环境参数设置的依据。在数据库的优化阶段,可以通过对数据库的监控来验证和调整我们的估计,并适当改变参数和调整sql,来控制系统的响应时间。
不同的业务特点增长率是不同的,根据在应用中的作用,数据库表基本上可以分为
(1)静态参数表(应用相关表):相对稳定,并且比较小
(2)动态参数表(事务相关表):于事务大小有关,缓慢增长
(3)数据表(事务表):增长的主要因素,并且不稳定
(4)临时/接口表:临时使用,之后被删除
具体优化方案请看后文。