我无法理解 DB Session 状态的含义。我搜索了一些参考资料,但没有得到任何帮助。任何人都可以解释这些状态(可运行、睡眠、暂停、运行和后台)的实际含义,这对我有很大帮助。提前致谢。
CR2*_*241 14
SQL Server 中一些最常见的 SPID 状态及其含义:
跑步:
此状态表示会话正在运行一个或多个批次。启用多个活动结果集 (MARS) 后,一个会话可以运行多个批次。这实际上意味着,使用此会话连接到 SQL Server 的客户端已经提交了 SQL Server 要处理的查询,并且 SQL Server 当前正在处理该查询。查询可以在生成解析器树到执行连接以对数据进行排序之间的任何地方......并且它当前正在消耗 CPU(处理器)周期。
暂停:
这意味着该请求当前处于非活动状态,因为它正在等待资源。资源可以是用于读取页面的 I/O,可以是网络上的通信,也可以是等待锁或闩锁的 WAIT。一旦它等待的任务完成,它就会被激活。例如,如果查询已经发布了一个 I/O 请求来读取一个完整表 tblStudents 的数据,那么这个任务将被挂起,直到 I/O 完成。一旦 I/O 完成(表 tblStudents 的数据在内存中可用),查询将移动到 RUNNABLE 队列中。
可运行:
SPID 位于调度程序的可运行队列中,并等待在调度程序上运行一个量程。这意味着请求分配了一个工作线程,但它们没有获得 CPU 时间。
RUNNABLE 队列可以比作一个杂货店类比,其中有多个结账行。登记员是CPU。只有一个客户在任何给定的收银机上签出例如“RUNNING”。在结账行花费的时间代表 CPU 压力。因此,此 SPID 正在等待正在运行的客户(与登记员)离开,以便它可以开始运行。您可以使用查询 SELECT wait_type,waiting_tasks_count,signal_wait_time_ms FROM sys.dm_os_wait_stats ORDER BY signal_wait_time_ms DESC 找出等待线程发出信号的时间与它开始运行的时间之间的差异。这个差异是在 RUNNABLE 队列中花费的时间。可以安全地忽略列表顶部的一些等待。
待办的:
请求正在等待工作人员接听。这意味着请求已准备好运行,但在 CPU 中没有可用于执行请求的工作线程。这并不意味着您必须增加“最大”。Worker 线程”,您必须检查当前正在执行的线程正在做什么以及为什么它们没有让步。我个人已经看到更多状态为 PENDING 的 SPID 的问题最终导致“Non-yielding Scheduler”和“Scheduler deadlock”。
背景:
请求是后台线程,例如资源监视器或死锁监视器。
睡眠:
没有工作要做。
归档时间: |
|
查看次数: |
65815 次 |
最近记录: |