关于SQL SERVER 数据库调优的分析
2013-02-27尹宇
尹 宇
(施耐德电气(中国)有限公司西安分公司 陕西 710075)
0 前言
随着企业应用的复杂度逐步加大,数据量也变的比以前多很多。优化SQL SERVER数据库成了,我们在开发应用的时候,刻不容缓的事情。
1 数据库优化步骤
(1)优化过程
数据库优化的步骤包括采集分析数据,制定优化方案,实施,评估。
(2)采集分析数据
根据不同数据库的情况,准备一些数据库的脚本,对采集数据来说非常重要。例如I/O的优化。在sql server的运行过程中,与硬盘交互的时候,如果读写不能顺利完成,数据库就有可能损坏。一个通常的规则就是,把日志文件和数据文件放在不同的物理盘中。
Dynamic Management Views可以检测I/O瓶颈。
数据库由于I/O引起系统系能下降时,可以通过以下SQL看到:
以下语句可以看到是哪个磁盘引起的瓶颈:
(3)制定方案
对于有风险的方案,一定要先备份数据库。制定方案的时候,要有开发人员,数据库专家,系统管理员来参加。
(4)实施
方案完成以后,要进行实施。实施一般是在业务空闲时间进行的。实施的过程中,应该有检查点。我们可以对着检查点,一项一项的去执行。当实施过程中出现问题的时候,要及时的调整策略,进行恢复。
(5)评估
要从系统和应用两个层面来评估,优化的结果。系统方面:CPU的使用,I/O的使用,系统内存,网络状态。应用方面:sql的响应时间,sql的执行计划,数据库负载情况。
2 系统优化
系统优化是资源配置的优化。系统优化的重点在于找到系统的瓶颈。由于有的时候,我们对系统不是特别的了解。优化起来就有困难。需要我们利用系统已经有的工具。例如:CPU性能调优。用windows任务管理器可以发现哪一个实例消耗了大量的CPU
图1 CPU资源消耗
通过以上图片我们可以看到是哪个实例消耗了大量的CPU资源,通过这种方法,我可以很方便的定位出消耗资源的实例。
3 数据库的优化
数据库消耗大的 sql语句,索引的设计,锁的应用等都是导致数据库变慢的很重要的因素。
(1)索引的设计
在经常变动的表上,索引不要过多。对于小表,不要建立索引。
数据库数据的变化,也会降低索引的性能,所以需要定期的重建索引。我们还可以用我们平时积累的脚本来分析索引的性能。
不要用SELECT *这样的语句,这样的语句会使索引失效,应用的时候,只列出需要查询的列。
(2)限定语句的复杂度
对于动态SQL,很多时候会让用户根据自己的条件进行组合查询,这样虽然功能强大。但是过多的选择条件,复杂的sql,会造成性能的下降。
最好使用临时表来存储大量数据。
对于性能低下的SQL语句,减少语句的logical reads是关键。 logical reads指执行时需访问的单位为8K的数据页总数。如果logical reads 越少,则需要内存和CPU时间就越少,语句执行速度就快。以下运行set statistics io命令可以得到logical reads。
如果Logical reads与返回行数相差大,就需要优化此语句。
4 总结
通过以上步骤,我们可以对我们的数据库进行优化。但是,优化一般不是一次就能够完成的。我们需要根据实际情况。进行多次优化,调整我们的计划,达到我们的优化目的。
[1] 白鳝,著.Oracle优化日记.人民邮电出版社.2012
[2] Mike Hotek,著.传思,译.SQL SERVER2008实现与维护.清华大学出版社.2011
[3] 徐海蔚,著.Microsoft SQL Server企业级平台管理实践.电子工业出版社,2010.
[4] www.mssqltips.com