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 Platform System (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 | 操作系統指派之線程的標識碼。 |
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。 |
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 | 適用於:SQL Server 2008 R2 (10.50.x) 和更新版本。 處理器群組標識碼。 |
pdw_node_id | int | 適用於:Azure Synapse Analytics、Analytics Platform System (PDW) 此散發節點的標識碼。 |
權限
在 SQL Server 和 SQL 受控執行個體上,需要 VIEW SERVER STATE
權限。
在 SQL Database [Basic]、[S0] 和 [S1] 服務目標,以及彈性集區中的資料庫,需要伺服器管理員帳戶、伺服器管理員帳戶、Microsoft Entra 管理員帳戶或 ##MS_ServerStateReader##
伺服器角色的成員資格。 在所有其他 SQL Database 服務目標上,需要資料庫的 VIEW DATABASE STATE
權限或 ##MS_ServerStateReader##
伺服器角色的成員資格。
SQL Server 2022 及更新版本的權限
需要伺服器上的 VIEW SERVER PERFORMANCE STATE 權限。
Linux 版本上的注意事項
由於 SQL 引擎在 Linux 中的運作方式,部分資訊與 Linux 診斷數據不符。 例如,os_thread_id
不符合 、或 procfs (/proc/)pid
等ps
top
工具的結果。 這是因為平臺抽象層 (SQLPAL)是 SQL Server 元件與操作系統之間的層。
範例
啟動時,SQL Server 會啟動線程,然後將背景工作角色與這些線程產生關聯。 不過,外部元件,例如擴充預存程式,可以在 SQL Server 進程下啟動線程。 SQL Server 無法控制這些線程。 sys.dm_os_threads可以提供在 SQL Server 進程中取用資源的流氓線程相關信息。
下列查詢可用來尋找背景工作角色,以及用來執行 SQL Server 未啟動之線程的時間。
注意
為了簡潔起義,下列查詢會在 語句中使用SELECT
星號 (*
)。 您應該避免使用星號 ,特別是針對目錄檢視、動態管理檢視和系統數據表值函式。 SQL Server 未來的升級和發行Microsoft可能會新增數據行,並將數據行的順序變更為這些檢視和函式。 這些變更可能會中斷預期特定順序和數據行數目的應用程式。
SELECT *
FROM sys.dm_os_threads
WHERE started_by_sqlservr = 0;
另請參閱
sys.dm_os_workers (Transact-SQL)
SQL Server 操作系統相關動態管理檢視 (Transact-SQL)