很多人在查看SQL语句等待的时候都是通过sys.dm_exec_requests查看,等待类型也是通过wait_type得出,sys.dm_os_waiting_tasks也可以看到session的等待那么有什么区别呢....
废话不多说直接开整.
测试版本2012
sys.dm_os_waiting_tasks 的字段说明:
waiting_task_address
varbinary(8)
等待任务的地址。
session_id
smallint
与任务关联的会话的 ID。
exec_context_id
int
与任务关联的执行上下文的 ID。
wait_duration_ms
int
此等待类型的总等待时间(毫秒)。此时间包含 signal_wait_time 。
wait_type
nvarchar(60)
等待类型的名称。
resource_address
varbinary(8)
任务等待的资源的地址。
blocking_task_address
varbinary(8)
当前持有此资源的任务。
blocking_session_id
smallint
正在阻塞请求的会话的 ID。如果此列为 NULL,则表示请求未被阻塞,或锁定会话的会话信息不可用(或无法进行标识)。
-2 = 阻塞资源由孤立的分布式事务拥有。
-3 = 阻塞资源由延迟的恢复事务拥有。
-4 = 由于内部闩锁状态转换而无法确定阻塞闩锁所有者的会话 ID。
blocking_exec_context_id
int
正在阻塞的任务的执行上下文 ID。
做个小例子:
-----开启事务更新一张表并且不提交。 begin tran update t1 set b = getdate() -----做一个查询 并且开启并行 select * from t1 inner join t2 on t1.a = t2.a option (querytraceon 8649)
查看更多关于SqlServer应用之sys.dm_os_waiting_tasks引发的疑问(上)的详细内容...