SQL Server数据库接收到查询请求,从生成计划到执行计划的过程,等待次数和等待时间在一定程度上揭示了系统性能的压力,如果资源严重不足,就会成为性能的瓶颈。因此,对等待的监控非常有助于对系统性能进行诊断,对查询语句进行性能调优。偶尔一次的异常等待,不足以表明系统存在瓶颈,但是,SQL Server实例经常出现特定的等待类型,并且等待时间趋于增加,这就说明,系统存在压力,或内存,或IO等,根据WaitType对系统进行监控和诊断,还能对查询进行性能调优,例如,Lock等待表明执行查询存在数据竞争,PageIOLatch等待表明IO响应缓慢,PageLatch等待表明文件的布局需要改进等。
一,查看等待信息本文分享常用的等待类型及其产生的原因,通常使用DMV来查看等待:
sys.dm_exec_requests 来查看系统当前正在处理的请求,
sys.dm_os_wait_stats 统计当前系统发生过的等待的信息
sys.dm_os_waiting_tasks 查看当前正处于等待状态的task
1,等待信息统计
SQL Server 保存了从上一次服务器启动或者手动清空之后累计的等待信息,总的来说,等待类型分为三类:资源等待,队列等待和外部等待,在日常使用中,通常会过滤掉系统相关的等待类型,因为这些等待对诊断性能瓶颈没有多大用处,同时还过滤掉等待时间为0的类型,脚本见文末的附言。
2,清空等待信息统计
对于生成环境,如果需要收集等待信息,那么最好把等待信息清0,然后重新开始计数,通常使用DBCC SQPERF()命令来实现:
DBCC SQLPERF('sys.dm_os_wait_stats',clear)