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.单次执行开销较大的查询
未完待续..