本文出处:http://www.cnblogs.com/wy123/p/6835939.html 

 

什么是等待

简单说明一下什么是等待:
当应用程序对SQL Server发起一个Session请求的时候,这个Session请求在数据库中执行的过程中会申请其所需要的资源,
比如可能会申请内存资源,表上的锁资源,物理IO资源,网络资源等等,
如果当前Session运行过程中需要申请的某些资源无法立即得到满足,就会产生等待。
SQL Server会以不用的方式来展现这个等待信息,比活动Session的等待信息,实例级的等待信息等等。
SQL Server中,等待事件是作为DBA进行TroubleShooting的重要参考信息之一,SQL Server中可以通过多中方式来获取等待信息。

但是对于SQL Server 2016之前的版本来说,不管是活动Session级别的等待和实例级的等待,参考意义都有限,
更多的时候是想要更加详细的且可以事后分析的等待,这就需要收集那些曾经已执行过的Session产生的等待信息,也就是特定Session等待信息的历史记录
本文重点介绍使用扩展事件来捕获等待信息,但不介绍扩展事件本身的使用,重点放在如何使用扩展事件来获取想要的等待事件信息。
需要对扩展事件有一定的了解。

 

等待信息的获取途径

在SQL Server中有一个系统视图sys.dm_os_wait_stats记录了自数据库服务启动以来累积产生的等待信息,
如下图,这个结果是实例级的,也就是记录的整个数据库服务器所有的等待事件的累积。
多数时候参考意义不是很大,比如某一天的网络延时很高,sys.dm_os_wait_stat