sys.dm_os_threads (Transact-SQL)
適用対象: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)
SQL Server プロセスで実行されているすべての SQL Server オペレーティング システム スレッドの一覧を返します。
Note
これを 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 | オペレーティング システムによって割り当てられているスレッドの 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。 |
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) 以降。 プロセッサ グループ ID。 |
pdw_node_id | int | 適用対象: Azure Synapse Analytics、Analytics Platform System (PDW) このディストリビューションがオンになっているノードの識別子。 |
アクセス許可
SQL Server と SQL Managed Instance では、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 バージョンに関する注意事項
Linux での SQL エンジンの動作により、この情報の一部が Linux 診断データと一致しません。 たとえば、 os_thread_id
は、 ps
、top
、procfs (/proc/pid
) などのツールの結果と一致しません。 これは、SQL Server コンポーネントとオペレーティング システムの間のレイヤーであるプラットフォーム抽象化レイヤー (SQLPAL) が原因です。
例
起動時に、SQL Server はスレッドを開始し、ワーカーをそれらのスレッドに関連付けます。 ただし、拡張ストアド プロシージャなどの外部コンポーネントは、SQL Server プロセスでスレッドを開始できます。 SQL Server は、これらのスレッドを制御しません。 sys.dm_os_threadsは、SQL Server プロセスでリソースを消費する不正なスレッドに関する情報を提供できます。
次のクエリは、SQL Server によって開始されていないスレッドを実行しているワーカーと実行に使用される時間を検索するために使用されます。
Note
次のクエリでは、簡略化のため *
ステートメントでアスタリスク (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)