sys.dm_os_threads (Transact-SQL)
返回在 SQL Server 进程中运行的所有 SQL Server 操作系统线程的列表。
适用范围:SQL Server(SQL Server 2008 到当前版本)。 |
列名 |
数据类型 |
说明 |
|
---|---|---|---|
thread_address |
varbinary(8) |
线程的内存地址(主键)。 |
|
started_by_sqlservr |
bit |
指示线程发起方。 1 = SQL Server 启动了线程。 0 = 其他组件启动了线程,例如,SQL Server 中的扩展存储过程。 |
|
os_thread_id |
int |
操作系统分配的线程 ID。 |
|
status |
int |
内部状态标志。 |
|
instruction_address |
varbinary(8) |
当前执行的指令的地址。 |
|
creation_time |
datetime |
该线程的创建时间。 |
|
kernel_time |
bigint |
该线程占用的内核时间。 |
|
usermode_time |
bigint |
该线程占用的用户时间。 |
|
stack_base_address |
varbinary(8) |
该线程的最高堆栈地址在内存中的位置。 |
|
stack_end_address |
varbinary(8) |
该线程的最低堆栈地址在内存中的位置。 |
|
stack_bytes_committed |
int |
在堆栈中提交的字节数。 |
|
stack_bytes_used |
int |
线程目前使用的字节数。 |
|
affinity |
bigint |
该线程运行时使用的 CPU 掩码。 这取决于 ALTER SERVER CONFIGURATION SET PROCESS AFFINITY 语句配置的值。 在软关联的情况下,可能与计划程序不同。 |
|
Priority |
int |
该线程的优先级值。 |
|
Locale |
int |
线程的缓存区域设置 LCID。 |
|
Token |
varbinary(8) |
线程的缓存模拟令牌句柄。 |
|
is_impersonating |
int |
指示该线程是否使用 Win32 模拟。 1 = 该线程使用与进程默认的安全凭据不同的安全凭据。 这表明线程正在模拟创建该进程的实体以外的其他实体。 |
|
is_waiting_on_loader_lock |
int |
指示线程是否正在等待加载程序锁的操作系统状态。 |
|
fiber_data |
varbinary(8) |
线程当前运行的 Win32 纤程。 只有在 SQL Server 配置了轻型池时,这才适用。 |
|
thread_handle |
varbinary(8) |
仅供内部使用。 |
|
event_handle |
varbinary(8) |
仅供内部使用。 |
|
scheduler_address |
varbinary(8) |
与该线程关联的计划程序的内存地址。 有关详细信息,请参阅 sys.dm_os_schedulers (Transact-SQL)。 |
|
worker_address |
varbinary(8) |
绑定到该线程的工作线程的内存地址。 有关详细信息,请参阅 sys.dm_os_workers (Transact-SQL)。 |
|
fiber_context_address |
varbinary(8) |
内部纤程上下文地址。 只有在 SQL Server 配置了轻型池时,这才适用。 |
|
self_address |
varbinary(8) |
内部一致性指针。 |
|
processor_group |
smallint |
处理器组 ID。
|
权限
要求对服务器拥有 VIEW SERVER STATE 权限。
示例
SQL Server 在启动时将启动线程,然后将工作与这些线程进行关联。 但是,外部组件(如扩展存储过程)可以在 SQL Server 进程中启动线程。 SQL Server 无法控制这些线程。 sys.dm_os_threads 可以提供占用 SQL Server 进程中的资源的恶意线程的相关信息。
下面的查询用于查找正在运行非 SQL Server 启动的线程的工作以及执行的时间。
备注
为清晰起见,下面的查询在 SELECT 语句中使用星号 (*)。应避免使用星号 (*),尤其是对目录视图、动态管理视图和系统表值函数。Microsoft SQL Server 将来的升级和版本可能添加列,并更改这些视图和函数中的列的顺序。这些更改可能会中断需要特定顺序和列数的应用程序。
SELECT *
FROM sys.dm_os_threads
WHERE started_by_sqlservr = 0;