MSSQL 性能调优心得(二)
2009-02-24 13:43
218 查看
救火算是救完了,接下来的几天都在用Profiler跟踪SQL语句,主要关注Duration, Reads/CPU。
首先关注Duration,把时间特别长的语句拿出来分析。一般把捕获的语句放在查询分析器中,如果需要参数自己手动提供。人肉观测下where条件,比如 where 字段1= 1 AND 字段2='ABC',那么看看字段1和字段2是不是至少有一个已经被索引了。如果有多表关联,检查两边关联字段上是否都有索引。
更精确的做法是在查询分析器中按下Ctrl L看下SQL Server的执行计划。
从右往左看。看最末级,最糟糕的情况是表扫描(除非这个表小到加了索引还不如不加)。比较理想的情况是索引查找,或者索引扫描(通常发生在有不是“等于”条件的查找)。另外如果出现了聚集索引扫描有时候不是好事,只能说明这个表存在聚集索引,但是给出的条件不能利用现有的任何索引。
如果实在想偷懒,可以用查询分析器中的“查询” -〉“数据库引擎中的优化顾问中的分析查询”来自动优化。一般而言会给出有价值的建议,但也不能盲目迷信。
通常索引做对了基本上就成功大半了。然后重点关注查询的IO性能和执行时间。
首先打开两个数据分析的开关:
set statistics io on
set statistics time on
这样执行语句的时候会给出具体的性能数据。
当然最重要的是尽量消灭物理读。大家都知道服务器最慢的部件就是磁盘了,物理读就是真的要在物理磁盘上读取数据。通常在服务器本身硬件性能良好、索引合理的情况下还算比较容易办到。然后就是看逻辑读,当然也希望越低越好。这就需要些技巧了。
首先关注Duration,把时间特别长的语句拿出来分析。一般把捕获的语句放在查询分析器中,如果需要参数自己手动提供。人肉观测下where条件,比如 where 字段1= 1 AND 字段2='ABC',那么看看字段1和字段2是不是至少有一个已经被索引了。如果有多表关联,检查两边关联字段上是否都有索引。
更精确的做法是在查询分析器中按下Ctrl L看下SQL Server的执行计划。
从右往左看。看最末级,最糟糕的情况是表扫描(除非这个表小到加了索引还不如不加)。比较理想的情况是索引查找,或者索引扫描(通常发生在有不是“等于”条件的查找)。另外如果出现了聚集索引扫描有时候不是好事,只能说明这个表存在聚集索引,但是给出的条件不能利用现有的任何索引。
如果实在想偷懒,可以用查询分析器中的“查询” -〉“数据库引擎中的优化顾问中的分析查询”来自动优化。一般而言会给出有价值的建议,但也不能盲目迷信。
通常索引做对了基本上就成功大半了。然后重点关注查询的IO性能和执行时间。
首先打开两个数据分析的开关:
set statistics io on
set statistics time on
这样执行语句的时候会给出具体的性能数据。
当然最重要的是尽量消灭物理读。大家都知道服务器最慢的部件就是磁盘了,物理读就是真的要在物理磁盘上读取数据。通常在服务器本身硬件性能良好、索引合理的情况下还算比较容易办到。然后就是看逻辑读,当然也希望越低越好。这就需要些技巧了。
相关文章推荐
- MSSQL 性能调优心得(三)
- MSSQL 性能调优心得(一)
- 关于数据库性能调优心得
- 系统性能调优(6)----寻找性能瓶颈心得
- Oracle 性能调优心得
- Oracle性能调优实践中的几点心得
- Oracle性能调优实践中的几点心得
- Hibernate性能调优心得
- Oracle性能调优实践中的几点心得
- Oracle性能调优实践中的几点心得
- Spark性能调优之——JVM调优之原理概述 以及降低cache操作的内存占比
- MySQL的性能调优工具:比mysqlreport更方便的tuning-primer.sh
- oracle性能调优-虚拟索引
- 大数据性能调优之HBase的RowKey设计
- Spark性能优化:资源调优篇(转)
- CDH5 Solr性能调优
- 性能分析与调优的原理
- MYSQL数据库性能调优之七:其他(读写分离、分表等)
- 实习心得(二)--关于段错误,内存泄露,性能瓶颈
- 心得总结:Java性能优化技巧集锦2