在做性能优化项目之前必须找到系统的瓶颈在哪里,定位了问题所在才能解决问题。上面这幅图中列出了影响系统性能的一些因素。在我多年与SQL Server 打交道的经历中,导致系统性能低下最主要的原因是:l 应用逻辑设计不合理l 查询写得不好l 表设计不合理l 索引设计不合理在做二、二、性能优化的流程:性能低下是一种慢性病,比较广泛发生在SQL Server 服务器群中,不具备传染性,没有可能自愈,通常病情会愈加严重。建议早发现早治疗,一般服药两个疗程可以治愈,痊愈后定期检查,平时注意控制……
呵呵,开个玩笑。性能优化项目大概类似如此,经过收集→分析→设计→实施,最终解决问题。1. 收集阶段使用性能监视器、SQL Server Profiler和一些脚本等,收集性能数据。收集至少24小时甚至更长的时间,可以在月结,报表日等业务高峰时间段额外收集。收集期间会有少许的性能影响。这里要说一下的是,Profiler也就是事件探查器是一个非常强大的收集工具,除了收集T-SQL的执行情况之外,还可以收集死锁和阻塞等。收集到的结果,可以导入性能监视器的数据,组合起来分析,观察在某个参数在峰值的时候数据库干什么。
2. 分析问题从收集的性能数据中进行分析,例如:l 用户在什么时间或者做某个操作的时候,会觉得慢l 硬件中哪个组件是性能瓶颈l 哪些表数据过多l 哪些索引的碎片很严重l 哪些数据库或者服务器的配置不合理l 哪些查询最慢而且执行次数最多,返回的记录数非常多,磁盘的读写非常大l 发生了哪些阻塞和死锁l ……我们可以将数据整理成看起来一目了然的Excel表格,例如下面这张分析查询的执行时间和次数的表格,可以让我们找到需要优先解决的问题:执行次数很多,平均执行时间很长的语句。
http://img1.51cto.com/album/903896/125380622402.jpg3. 设计优化方案在分析了问题之后,我们需要设计优化方案。有些优化方案对应用和业务没有影响,有些数据库的优化方案可能影响到应用程序,需要开发人员配合。调整的方案可能是:l 调整表的设计:归档数据,分区,添加冗余键等l 索引的调整:去掉不合理的索引,创建必要的索引,创建自动的索引维护计划l 调整配置:调整数据库和操作系统的配置l 调整应用程序:调整不合理的查询,不合理的业务逻辑设计,访问数据的方式,控制访问数据量等等l …… 各种优化方法和性能影响因素相关性如下:http://img1.51cto.com/album/903896/125380760127.JPG设计出来的实施方案,需要经过测试和论证。以确认这种修改是否有效,和减少调整所带来的负面影响。 4. 实施在系统空闲时间,将调整索引、应用程序、数据库设计等方面的优化方案实施到生产系统上。并记录下来,最后形成一个实施报告。我不认为一次性能解决所有的问题,通常要需要经过两个疗程之后,才能有所好转。以后间隔一个时间进行一次检查,解决我们遗漏的一些问题。 三、三、DBA 该做些什么? 在一次管理专家课程开始之前,我让每位同学谈一谈各自对这个角色的看法,主要从两个方面:一是数据库的管理最重要的是什么,二是DBA平时主要的工作是什么? 对于第一点,数据库管理中最重要的是什么?所有的同学的看法几乎一致,可以概括为三个字——稳定性。详细一点就是:数据不要丢失,数据库服务器不能宕机。基本也是如此,只是再加上“安全性”,因为数据安全不只是数据不会损坏,还有信息的机密性。 对于第二点,DBA平时主要的工作是什么?很多同学的看法不同,有人说是管理数据,有人说设计数据库,有人说备份和恢复,有人说建立群集等等高可用性方案,还有人说是做数据的ETL。我的看法有些不同。 设计数据库是谁做的?通常是数据库开发人员或者软件供应商做的;数据管理太过初级,增删改查,这样的数据操作由应用程序来实现了;备份和恢复、数据的ETL只要做一次,设计好作业以后由数据库定期调度就可以了;群集、数据库镜像等也只要做一次就可以了。上面的这些管理任务,DBA必须掌握,掌握了之后,做成自动化的管理计划,就可以让自己解放出来了。 http://img1.51cto.com/album/903896/125380623732.jpg DBA 需要定期检查服务器的日志,发现有错误日志,就进行排错;定期检查数据库文件的空间,发现空间不够了,手工扩展一下空间;定期检查一下备份、ETL、索引维护、报表处理、数据归档、复制等自动调度作业是否运行正常等之外,还有一项最重要的工作,就是监视和调整数据库服务器的性能。要不然同学们去找工作的时候,就得先问问对方,贵公司系统有没有性能问题,如果有的话那我就不去了,因为我也做不了。性能问题虽然不是每个企业都会遇到,但是遇到了是让人非常头痛的。一个合格的DBA来说,至少要具有能发现性能问题和找到解决途径的能力。啰啰嗦嗦,也有两千字了。好了,到这里了,就到这里了。
|