sys.dm_os_workers
更新日期: 2006 年 4 月 14 日
对于系统中的每个工作线程,相应地返回一行。
列名 | 数据类型 | 说明 |
---|---|---|
worker_address |
varbinary(8) |
工作线程的内存地址。 |
status |
int |
仅供内部使用。 |
is_preemptive |
bit |
1 = 正在以抢先计划运行工作线程。任何运行外部代码的工作线程都运行在抢先计划之下。 |
is_fiber |
bit |
1 = 正在以轻型池运行工作线程。有关详细信息,请参阅 sp_configure (Transact-SQL)。 |
is_sick |
bit |
1 = 工作线程在尝试获得旋转锁时遇到困难。如果设置此位,这可能指示发生了对频繁访问对象的争用问题。 |
is_in_cc_exception |
bit |
1 = 工作线程当前正在处理非 SQL Server 异常。 |
is_fatal_exception |
bit |
指定此工作线程是否收到异常。 |
is_inside_catch |
bit |
1 = 工作线程当前正在处理异常。 |
is_in_polling_io_completion_routine |
bit |
1 = 工作线程当前正在运行挂起 I/O 的 I/O 完成例程。有关详细信息,请参阅 sys.dm_io_pending_io_requests。 |
context_switch_count |
int |
此工作线程所执行的计划程序上下文切换数。 |
pending_io_count |
int |
此工作线程所执行的物理 I/O 数。 |
pending_io_byte_count |
bigint |
此工作线程的所有挂起的物理 I/O 的字节总数。 |
pending_io_byte_average |
int |
此工作线程的物理 I/O 的平均字节数。 |
wait_started_ms_ticks |
int |
此工作线程进入 SUSPENDED 状态时 ms_ticks 中的时点。从 sys.dm_os_sys_info 的 ms_ticks 中减去此值后将返回工作线程已经等待的毫秒数。 |
wait_resumed_ms_ticks |
int |
此工作线程进入 RUNNABLE 状态时 ms_ticks 中的时点。从 sys.dm_os_sys_info 中的 ms_ticks 中减去此值后,将返回工作线程已在可运行队列中等待的毫秒数。 |
task_bound_ms_ticks |
bigint |
任务绑定到此工作线程时 ms_ticks 中的时点。 |
worker_created_ms_ticks |
bigint |
工作线程创建时 ms_ticks 中的时点。 |
exception_num |
int |
此工作线程遇到的最后一个异常的错误号。 |
exception_severity |
int |
此工作线程遇到的最后一个异常的严重性。 |
exception_address |
varbinary(8) |
出现异常的代码地址 |
区域设置 |
int |
工作线程的区域设置 LCID 设置。 |
affinity |
bigint |
工作线程的关联设置。有关详细信息,请参阅 sys.dm_os_schedulers。 |
state |
nvarchar(60) |
工作线程的状态。可以是下列值之一: INIT = 工作线程当前正在初始化。 RUNNING = 工作线程当前正在以非抢先或抢先方式运行。 RUNNABLE = 工作线程准备运行在计划程序上。 SUSPENDED = 工作线程当前正在延迟,以等待事件向它发送信号。 |
start_quantum |
bigint |
此工作线程的当前运行开始时 cpu_ticks 中的时间。 |
end_quantum |
bigint |
此工作线程的当前运行结束时 cpu_ticks 中的时间。 |
last_wait_type |
nvarchar(60) |
最后一个等待的类型。有关等待类型的列表,请参阅 sys.dm_os_wait_stats。 |
return_code |
int |
从最后一个等待返回值。可以是下列值之一: 0 =SUCCESS 3 = DEADLOCK 4 = PREMATURE_WAKEUP 258 = TIMEOUT |
quantum_used |
bigint |
仅供内部使用。 |
max_quantum |
bigint |
仅供内部使用。 |
boost_count |
int |
仅供内部使用。 |
tasks_processed_count |
int |
此工作线程所处理的任务数。 |
fiber_address |
varbinary(8) |
此工作线程所关联的纤程的内存地址。 NULL = SQL Server 没有为轻型池进行配置。 |
task_address |
varbinary(8) |
当前任务的内存地址。有关详细信息,请参阅 sys.dm_os_tasks。 |
memory_object_address |
varbinary(8) |
工作线程内存对象的内存地址。有关详细信息,请参阅 sys.dm_os_memory_objects。 |
thread_address |
varbinary(8) |
与此工作线程关联的线程的内存地址。有关详细信息,请参阅 sys.dm_os_threads。 |
signal_worker_address |
varbinary(8) |
最后一个向此对象发出信号的工作线程的内存地址。有关详细信息,请参阅 sys.dm_os_workers。 |
scheduler_address |
varbinary(8) |
计划程序的内存地址。有关详细信息,请参阅 sys.dm_os_schedulers。 |
备注
如果工作线程的状态是 RUNNING 并且工作线程正在以非抢先方式运行,则工作线程地址将与 sys.dm_os_schedulers 中的 active_worker_address 进行匹配。
当等待事件的工作线程得到信号时,工作线程将被放在可运行队列的开头。SQL Server 允许这种情况在行中发生一千次,在此之后工作线程将被放在队列的末尾。将工作线程移动到队列末尾会对性能有某些潜在影响。
权限
需要对服务器具有 VIEW SERVER STATE 权限。
示例
您可以使用下面的查询找出工作线程已在 SUSPENDED 或 RUNNABLE 状态下运行的时间。
SELECT
t1.session_id,
CONVERT(varchar(10), t1.status) AS status,
CONVERT(varchar(15), t1.command) AS command,
CONVERT(varchar(10), t2.state) AS worker_state,
w_suspended =
CASE t2.wait_started_ms_ticks
WHEN 0 THEN 0
ELSE
t3.ms_ticks - t2.wait_started_ms_ticks
END,
w_runnable =
CASE t2.wait_resumed_ms_ticks
WHEN 0 THEN 0
ELSE
t3.ms_ticks - t2.wait_resumed_ms_ticks
END
FROM sys.dm_exec_requests AS t1
INNER JOIN sys.dm_os_workers AS t2
ON t2.task_address = t1.task_address
CROSS JOIN sys.dm_os_sys_info AS t3
WHERE t1.scheduler_id IS NOT NULL;
下面是结果集:
session_id status command worker_state w_suspended w_runnable
---------- ---------- --------------- ------------ ----------- --------------------
4 background LAZY WRITER SUSPENDED 688 688
6 background LOCK MONITOR SUSPENDED 4657 4657
19 background BRKR TASK SUSPENDED 603820344 603820344
14 background BRKR EVENT HNDL SUSPENDED 63583641 63583641
51 running SELECT RUNNING 0 0
2 background RESOURCE MONITO RUNNING 0 603825954
3 background LAZY WRITER SUSPENDED 422 422
7 background SIGNAL HANDLER SUSPENDED 603820485 603820485
13 background TASK MANAGER SUSPENDED 603824704 603824704
18 background BRKR TASK SUSPENDED 603820407 603820407
9 background TRACE QUEUE TAS SUSPENDED 454 454
52 suspended SELECT SUSPENDED 35094 35094
1 background RESOURCE MONITO RUNNING 0 603825954
在输出中,当 w_runnable
和 w_suspended
相等时,它代表工作线程处于 SUSPENDED 状态下的时间。否则,w_runnable
代表工作线程处于 RUNNABLE 状态下的时间。在输出中,会话 52
处于 SUSPENDED
状态下的时间为 35,094
毫秒。
请参阅
参考
动态管理视图和函数
与 SQL Server 操作系统相关的动态管理视图
其他资源
帮助和信息
更改历史记录
版本 | 历史记录 |
---|---|
2006 年 4 月 14 日 |
|