背景:
SQL Server性能和优化是我们经常讨论的一个话题,也是要经常面对的一个问题,当SQL Server大型数据库遇到性能瓶颈时,我们不得不查找原因,分析问题,解决问题。
在处理性能问题时,数据库专家倾向于关注系统的技术层面,如资源队列、资源利用率等。而一般用户只把性能问题简单地认为是等待时间,他们发出一个请求,然后等待返回结果。用户通常认为在交互请求后,超过三秒才得到响应,就算存在性问题了,他们并不关心平均每个磁盘转轴上有多少命令在待,或者缓存命中率(cache hit ratio)是多少,也不关心阻塞、CUP利用率、缓存中数据页的平均停留时间(page life expectancy)等。他们只关心等待时间,这正是优化性能应该着手的地方。
SQL Server 2008引入的数据收集器组件正用来分析以上问题,本篇不讨论各种优化方式,仅认识数据收集器和使用方法。
数据收集器简介:
SQL Server 2008引入了一个称为数据收集器(data collector)的组件,用于从多种来源收集不同类型的数据(性能方面的数据或其他数据),并将这些性能信息保存在称为管理数据仓库(management data warehouse)的关系数据库中。
数据收集器会安装三个系统数据收集组(system data collection set),分别用于收集磁盘使用情况、服务器活动、查询统计信息。新的数据收集平台可以帮助你自动收集性能和其他信息,也可以通过预先配置的报表,以图表方式对数据进行分析。
通过以上简单介绍,不难看出里面提到到几个核心的东西,即【数据仓库】【数据收集】【统计分析报表】。要得到各种数据,需要有地方来存储,以备后期分析报表,这就需要数据仓库。有了数据仓库还需要设置数据收集过程,如收集频率等等,这就是数据收集。数据已经收集到了数据仓库,需要通过分析报表查看分析结果,以便于进一步对症下药。说了这么多,还是先动手从实例中体验结果。
配置管理数据仓库
首先要确保SQL Server代理要启动,然后实例上 -> 管理 -> 数据收集 -> 配置管理数据仓库
配置承载数据仓库的实例及数据库:
图例:
继续下一步,直到完成。
配置当前数据库做数据仓库的监视对象:
上一套配置步骤已经准备好了承载数据仓库,现在就要将当前的实例绑定到以上数据仓库。下面同样使用以上向导,但选项不同。
图例:
继续下一步,直到完成。
到此数据仓库和数据收集创建完成,将看到下图的状态。
通过以上步骤自动创建的三个数据收集组,各数据收集组有默认的属性,比如数据仓库中的数据保留时间,数据上载计划等。数据上载计划带有一些默认的值,如每小时自动上载一次,每10分钟自动上载一次...也可以自定义,按照这些时间点,当前实例的系统性能数据自动上载到数据仓库中。看如下图:
通过报表结果能看出哪些等待类别、哪个时间点占用资源最高,比如通过柱状图能分析出占用资源的系统类型和高峰期等。对于三种数据收集组的数据详细的结果,我正在进一步研究,计划专门写篇博文分析介绍详情。
MSDN:http://msdn.microsoft.com/zh-cn/library/bb677356.aspx
动态管理视图(DMV)sys.dm_os_wait_stats
也可以通过动态管理视图(DMV)sys.dm_os_wait_stats,查出各等待类型。
它包含以下属性:
wait_type 等待类别。
waiting_task_count 表示该类待的数量。
wait_time_ms 以毫秒为单位的该类等待的总等待时间(该时间包含signal_wait_time_ms)。
max_wait_time_ms 最大等待时间。
signal_wait_time_ms 它是正在等待的线程从收到信号通知到其开始运行之间的时差。
注:对于SQL Server之前的版本没有数据收集器组件,也可以通过此DMV查询分析相关值。
此文对自己算是一个小的总结和笔记,对不熟悉的博友算是一个介绍,对于非常了解的高人还望不吝赐教,谢谢!