vor*_*rou 5 sql-server wait-types
从MSDN:
返回有关正在等待某个资源的任务的等待队列的信息。
在此定义中 CPU 是否被视为资源?我最初认为不是,但让我担心的是wait_duration_ms
来自同一页面的定义:
wait_duration_ms 此等待类型的总等待时间,以毫秒为单位。这个时间包括signal_wait_time。
如果它确实包括RUNNABLE
任务,那么wait_type
它们的价值是什么?它是一些特殊的值,表明它没有被阻塞,而是在等待调度程序,还是它处于SUSPENDED
状态时的值相同?
因耗尽其量程而产生调度程序的任务将不会出现在sys.dm_os_waiting_tasks 中;但是,它经历的任何信号等待时间都会在sys.dm_os_wait_stats下累积SOS_SCHEDULER_YIELD
。
获得当前不可用的“可等待资源”的任务确实出现在sys.dm_os_waiting_tasks 中并带有适当wait_type
的暂停。它累积资源等待时间,直到发出信号(当资源可用时)并且可以运行。然后任务累积信号等待时间,直到它获取调度程序并转换到运行状态。任务在sys.dm_os_waiting_tasks 中保持可见,直到等待完全完成(包括信号等待),并且wait_type
从不改变。
这是我的理解和观察。我在任何地方都找不到官方或半官方记录的这种详细程度。
注意事项:sys.dm_os_waiting_tasks是对快速变化的内部 SOS 任务数据结构的非事务性视图。许多 DMV 以这种方式工作,并且由不同的开发人员在不同的时间编写。它们的输出可能非常有用,但加入多个 DMV 很容易导致明显不一致的结果。
比较sys.dm_os_waits DMV 的快照是拆分聚合资源和信号等待特定等待类型的更好方法。scheduling.wait_completed
如果需要该级别的详细信息,则扩展事件例如可用于捕获特定的等待事件。
...您是否同意 BOL 的措辞不正确/令人困惑?
技术写作很难。总会有人抱怨细节太多,而另一些人则说细节太少。DMV 显示等待某些资源,直到等待结束。我想在某些方面可能会更清楚,但是如果不详细说明内部实现并最终提供源代码,您能走多远?