SQL Server调优的五个步骤(上)


        www.InnovateDigital.com 整理

      步骤1 优化应用工作量

      优化应用性能的第一步是优化工作量。在该部分调优方法论中列出的优化步骤能够解决很多常见的性能和可延展性问题。这些优化可以帮助降低由于特殊的设计或低效的实施导致的性能瓶颈影响,并且可以保证系统资源能够充分和有效利用。例如,解决低效率的查询计划或低效率的缓存等问题将会更加有效率地发挥SQL服务器缓存机制,从而整体上降低I/O操作。
 

      ■ 编译/重新编译- 数据库,CPU

      确定是否存在显著的CPU竞争,如果存在,请关注重新编译次数多的那些T-SQL语句,它们占用大量CPU资源。如果应用中SQL代码重新编译次数很多,可以考虑下面优化方法:

      ●评估有关的语句的作用,将数据修改代码和数据定义命令相分离。

      ●解决过时的索引统计。

      ●使用变量或其他逻辑替代临时表。微软忠告:频繁地编译/重新编译会消耗很高的CPU和磁盘I/O资源,会增加整体的工作量竞争。


      ■ 低效率的查询计划-数据库,CPU

      确定是否存在明显的CPU竞争,如果有,请确定无效率查询计划是如何占用过多的cpu资源。是否存在数据库模式,应用需求,用户使用的报表工具,或其它条件促使在生产环境下执行无效率的查询,使用Hash连接和排序操作的查询,结果会消耗很高的CPU和I/O。

 


      步骤2 减少读/写活动

      一旦你的应用代码被调优,接下来达到最佳性能就是减少应用运行时读写活动量或I/O,一个最常见的应用代码错误是编写低效率的数据查询操作;查询返回很多的数据-太多的列或行-SQLServer会负载很大。无论是应用设计允许用户创建自己的(通常无效率的),不限定每页结果的查询,还是后端代码使用嵌套查询,这些查询会返回很多的数据(包括用视图或表值函数写的查询),你的应用做为一个整体可能会访问更多的远超过需要的数据。在一些情况下,检查完你的应用代码后,你可能会认识到你的代码将会返回底层表中的所有数据,来满足查询需要!分析存在的索引和它们维护模式,确定添加索引是否合适,分析数据库文件的增长情况会帮你极大减少应用的读写活动量,可以释放宝贵的磁盘资源。
 

      ■ 无效率的或缺失的索引-DB I/O

      确定是否存在明显的磁盘I/O竞争,如果存在,需要分析缺失或或无效率的索引是如何导致磁盘I/O瓶颈的。DBA们必须评估应用的 SQL代码保证语句尽可能有效率地执行;这项任务通常必需创建索引来最有效地提取数据。如果应用的SQL代码发生变化,访问不同的表或从目的表选择更多的/不同的列,当前的索引可能会不起作用。需要分析说明SQL 代码无效率使用存在的索引或语句正在用表扫描搜集数据的地方。

      ■ 磁盘I/O-数据库文件的增长-DB I/O

      确定是否存在明显的磁盘I/O竞争,如果存在,需要关注频繁使用扩展段的数据库。DBA们应关注在一定的时间窗口内频繁使用扩展段的数据库。当SQL Server增大数据库文件时,文件倾向于破碎,操作将非常消耗CPU和I/O。

 

      ■ 磁盘I/O-数据库文件配置-DB I/O

      确定是否存在明显的磁盘I/O竞争,如果存在,请关注配置糟糕的数据库文件是如何导致数据库内锁竞争的增加,进而形成资源瓶颈,减少应用之间的竞争。DBA应考察可能导致闩竞争的一些数据库文件的配置问题,包括:

      ●数据文件和日志文件配置在同一磁盘设备上。

      ●数据库文件数量少于可用的CPU数量,特别是TempDB数据库。

      ●数据库文件数量少于可用的磁盘I/O设备数量。