sys.dm_os_threads (Transact-SQL)
适用于:SQL Server Azure SQL 数据库 Azure SQL 托管实例 Azure Synapse Analytics Analytics Platform System (PDW)
返回 SQL Server 进程下运行的所有 SQL Server 操作系统线程的列表。
注意
若要从 Azure Synapse Analytics 或 Analytics 平台系统(PDW)调用此功能,请使用名称 sys.dm_pdw_nodes_os_threads。 Azure Synapse Analytics 中的无服务器 SQL 池不支持此语法。
列名称 | 数据类型 | 描述 |
---|---|---|
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 | 线程目前使用的字节数。 |
关联 | bigint | 该线程运行时使用的 CPU 掩码。 这取决于 ALTER SERVER CONFIGURATION SET PROCESS AFFINITY 语句配置的值。 在软关联的情况下,可能与计划程序不同。 |
优先级 | int | 该线程的优先级值。 |
区域设置 | int | 线程的缓存区域设置 LCID。 |
令牌 | 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 | 适用于:SQL Server 2008 R2 (10.50.x) 及更高版本。 处理器组 ID。 |
pdw_node_id | int | 适用于:Azure Synapse Analytics、Analytics Platform System (PDW) 此分发所在节点的标识符。 |
权限
对于 SQL Server 和 SQL 托管实例,需要 VIEW SERVER STATE
权限。
在 SQL 数据库“基本”、“S0”和“S1”服务目标中,对于“弹性池”中的数据库,服务器管理员帐户、Microsoft Entra 管理员帐户或 ##MS_ServerStateReader##
服务器角色中的成员身份为必填项。 对于所有其他 SQL 数据库服务目标,需要数据库的 VIEW DATABASE STATE
权限或 ##MS_ServerStateReader##
服务器角色中的成员身份。
SQL Server 2022 及更高版本的权限
要求对服务器具有 VIEW SERVER PERFORMANCE STATE 权限。
Linux 版本说明
由于 SQL 引擎在 Linux 中的工作原理,其中一些信息与 Linux 诊断数据不匹配。 例如, os_thread_id
与工具的结果不匹配,例如 ps
,top
或 procfs (/proc/pid
)。 这是因为平台抽象层 (SQLPAL),这是 SQL Server 组件和操作系统之间的层。
示例
启动时,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;
另请参阅
sys.dm_os_workers (Transact-SQL)
与 SQL Server 操作系统相关的动态管理视图 (Transact-SQL)