sql server08 查询优化系列 3-2 sql 查询性能分析

没有profiler的情况下 的 查询性能度量

动态管理视图

sys.dm_exec_query_stats  ---> http://msdn.microsoft.com/en-us/library/ms189741.aspx
可以查看查询性能.  可以看到此时运行时间最长的查询或者最多物理读操作.

识别开销较大的查询

sql serve的目标是 在最短的时间 将结果集返回给客户.

为此,sql server 有一个内建的,基于开销的优化程序.叫做查询优化器 (query optimizer),它 生成一个

成本效益高的策略(称为查询计划).

查询计划 计算许多因素的权重,包括(但是不限于) 执行查询 所需的cpu,内存以及磁盘I/O,的使用情况--这些均来自

于 索引维护或过程中生成的统计..

在跟踪返回的数据中, cpu和reads 还显示了查询的开销所在.

cpu 表示 用于执行查询的cpu时间.

reads列 表示 一个查询操作 的 逻辑页面的数量,从而指出 查询产生 的 内存压力.

它还提供了 磁盘压力的指标.

因为内存页面 必须在操作查询中被备份,在第一次数据访问期间写入,并且在内存瓶颈的时候 被移到磁盘上.

查询的逻辑读越大,磁盘压力的可能性就越大. 过多的逻辑页面页增加了 cpu用于管理这些页面的 负载.

 

导致大量逻辑读的查询 通常在相应的大数据集上得到锁.即使读 页需要在所有数据上的共享锁.这些查询阻塞了其他

请求修改这些数据的查询,但是不阻塞 读取数据的查询.就会导致阻塞.

 

开销大的查询 分为两类:

  1. 单次执行: 查询的一次单独执行的开销较大.
  2. 多次执行:查询本身开销不大,但是该查询重复执行,导致系统资源上的压力/

 

1.单次执行开销较大的查询

未完待续..

posted @ 2012-05-11 17:30  高捍得  阅读(209)  评论(0编辑  收藏  举报