sys.dm_exec_requests (Transact-SQL)
Applies to: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW) Microsoft Fabric の SQL 分析エンドポイント Microsoft Fabric のウェアハウス
SQL Server で実行中の各要求に関する情報を返します。 要求の詳細については、「スレッドおよびタスクのアーキテクチャ ガイド」を参照してください。
Note
Azure Synapse Analytics または Analytics Platform System (PDW) 内の専用 SQL プールからこれを呼び出すには、「sys.dm_pdw_exec_requests (Transact-SQL)」を参照してください。 サーバーレス SQL プールまたは Microsoft Fabric の場合は、sys.dm_exec_requests
を使います。
列名 | データ型 | 説明 |
---|---|---|
session_id |
smallint | 要求が関係しているセッションの ID。 NULL 値は許可されません。 |
request_id |
int | 要求の ID。 セッションのコンテキスト内で一意です。 NULL 値は許可されません。 |
start_time |
datetime | 要求到着時のタイムスタンプ。 NULL 値は許可されません。 |
status |
nvarchar(30) | 要求の状態。 値は、次のいずれかです。 background rollback 実行中 実行可能 休止中 一時停止中 NULL 値は許可されません。 |
command |
nvarchar(32) | 処理中のコマンドの現在の種類を識別します。 一般的なコマンドの種類には次の値があります。 選択 INSERT UPDATE DELETE BACKUP LOG BACKUP DATABASE DBCC FOR 要求のテキストは、要求の対応する sql_handle でsys.dm_exec_sql_text を使用して取得できます。 内部システム プロセスでは、実行するタスクの種類に基づいてコマンドが設定されます。 タスクには次のいずれかの値を含めることができます。LOCK MONITOR CHECKPOINTLAZY WRITER NULL 値は許可されません。 |
sql_handle |
varbinary(64) | クエリが含まれているバッチまたはストアド プロシージャを一意に識別するトークンを指定します。 Null 許容。 |
statement_start_offset |
int | バッチまたは保存されるオブジェクトのテキスト内での、行が示すクエリの開始位置 (バイト単位)。0 で始まります。 sql_handle 、statement_end_offset 、sys.dm_exec_sql_text 動的管理関数と共に使用して、要求に対して現在実行中のステートメントを取得できます。 Null 許容。 |
statement_end_offset |
int | バッチまたは保存されるオブジェクトのテキスト内での、行が示すクエリの終了位置 (バイト単位)。0 で始まります。 sql_handle 、statement_start_offset 、sys.dm_exec_sql_text 動的管理関数と共に使用して、要求に対して現在実行中のステートメントを取得できます。 Null 許容。 |
plan_handle |
varbinary(64) | 現在実行中のバッチのクエリ実行プランを一意に識別するトークンです。 Null 許容。 |
database_id |
smallint | 要求の実行対象データベースの ID。 NULL 値は許可されません。 Azure SQL Database では、値は 1 つのデータベースまたは Elastic Pool 内で一意ですが、論理サーバー内では一意ではありません。 |
user_id |
int | 要求を送信したユーザーの ID。 NULL 値は許可されません。 |
connection_id |
uniqueidentifier | 要求を受信した接続の ID。 Null 許容。 |
blocking_session_id |
smallint | 要求をブロックしているセッションの ID。 この列が NULL または 0 の場合、要求はブロックされないか、ブロックセッションのセッション情報が使用できません (または識別できません)。 詳細については、「SQL Server のブロックの問題を理解して解決する」を参照してください。-2 = ブロックしているリソースは、孤立した分散トランザクションが所有しています。 -3 = ブロッキング リソースは遅延復旧トランザクションによって所有されます。 -4 = ブロック ラッチ所有者の session_id は、内部ラッチ状態遷移のため、現時点では特定できませんでした。-5 = session_id ブロック ラッチ所有者を特定できませんでした。このラッチの種類 (SH ラッチなど) に対して追跡されていないためです。単独では、 blocking_session_id -5 はパフォーマンスの問題を示していません。 -5 は、セッションが非同期アクションの完了を待機していることを示します。 -5 が導入される前は、同じセッションがblocking_session_id 0 を示していましたが、まだ待機状態でした。ワークロードによっては、 blocking_session_id = -5 の監視が一般的な場合があります。 |
wait_type |
nvarchar(60) | 要求が現在ブロックされている場合の待機の種類。 Null 許容。 待機の種類の詳細については、「sys.dm_os_wait_stats (Transact-SQL)」を参照してください。 |
wait_time |
int | 要求が現在ブロックされている場合の現時点での待機時間 (ミリ秒単位)。 NULL 値は許可されません。 |
last_wait_type |
nvarchar(60) | 要求がブロックされていた場合の最後の待機の種類。 NULL 値は許可されません。 |
wait_resource |
nvarchar (256) | 要求が現在ブロックされている場合の現在待機中のリソース。 NULL 値は許可されません。 |
open_transaction_count |
int | 要求に対して開いているトランザクションの数。 NULL 値は許可されません。 |
open_resultset_count |
int | 要求に対して開いている結果セットの数。 NULL 値は許可されません。 |
transaction_id |
bigint | 要求が実行されるトランザクションの ID。 NULL 値は許可されません。 |
context_info |
varbinary (128) | セッションの CONTEXT_INFO 値。 Null 許容。 |
percent_complete |
real | 次のコマンドで完了した作業の割合。ALTER INDEX REORGANIZE AUTO_SHRINK オプション ALTER DATABASE BACKUP DATABASE DBCC CHECKDB DBCC CHECKFILEGROUP DBCC CHECKTABLE DBCC INDEXDEFRAG DBCC SHRINKDATABASE DBCC SHRINKFILE RECOVERY RESTORE DATABASE ROLLBACK TDE ENCRYPTION NULL 値は許可されません。 |
estimated_completion_time |
bigint | 内部でのみ使用されます。 NULL 値は許可されません。 |
cpu_time |
int | 要求で使用される CPU 時間 (ミリ秒単位)。 NULL 値は許可されません。 |
total_elapsed_time |
int | 要求を受信してから経過した総時間 (ミリ秒単位)。 NULL 値は許可されません。 |
scheduler_id |
int | この要求をスケジュールしているスケジューラの ID。 Null 許容。 |
task_address |
varbinary(8) | この要求に関連付けられているタスクに割り当てられたメモリ アドレス。 Null 許容。 |
reads |
bigint | 要求で実行された読み取りの数。 NULL 値は許可されません。 |
writes |
bigint | 要求で実行された書き込みの数。 NULL 値は許可されません。 |
logical_reads |
bigint | 要求で実行された論理読み取りの数。 NULL 値は許可されません。 |
text_size |
int | 要求の TEXTSIZE 設定。 NULL 値は許可されません。 |
language |
nvarchar(128) | 要求の言語設定。 Null 許容。 |
date_format |
nvarchar(3) | 要求の DATEFORMAT 設定。 Null 許容。 |
date_first |
smallint | 要求の DATEFIRST 設定。 NULL 値は許可されません。 |
quoted_identifier |
bit | 1 = 要求に対して QUOTED_IDENTIFIER が ON です。 それ以外の場合は 0 が返されます。 NULL 値は許可されません。 |
arithabort |
bit | 1 = 要求に対して ARITHABORT 設定が ON です。 それ以外の場合は 0 が返されます。 NULL 値は許可されません。 |
ansi_null_dflt_on |
bit | 1 = 要求ANSI_NULL_DFLT_ON設定が ON です。 それ以外の場合は 0 が返されます。 NULL 値は許可されません。 |
ansi_defaults |
bit | 1 = 要求に対して ANSI_DEFAULTS 設定が ON です。 それ以外の場合は 0 が返されます。 NULL 値は許可されません。 |
ansi_warnings |
bit | 1 = 要求に対して ANSI_WARNINGS 設定が ON です。 それ以外の場合は 0 が返されます。 NULL 値は許可されません。 |
ansi_padding |
bit | 1 = 要求ANSI_PADDING設定が ON です。 それ以外の場合は 0 が返されます。 NULL 値は許可されません。 |
ansi_nulls |
bit | 1 = 要求ANSI_NULLS設定が ON です。 それ以外の場合は 0 が返されます。 NULL 値は許可されません。 |
concat_null_yields_null |
bit | 1 = 要求に対して CONCAT_NULL_YIELDS_NULL 設定が ON です。 それ以外の場合は 0 が返されます。 NULL 値は許可されません。 |
transaction_isolation_level |
smallint | この要求に対するトランザクションの作成に使用された分離レベル。 NULL 値は許可されません。 0 = Unspecified 1 = ReadUncommitted 2 = ReadCommitted 3 = 反復可能 4 = Serializable 5 = Snapshot |
lock_timeout |
int | 要求のロック タイムアウトまでの時間 (ミリ秒単位)。 NULL 値は許可されません。 |
deadlock_priority |
int | 要求の DEADLOCK_PRIORITY 設定。 NULL 値は許可されません。 |
row_count |
bigint | この要求によってクライアントに返された行の数。 NULL 値は許可されません。 |
prev_error |
int | 要求の実行中に発生した最後のエラー。 NULL 値は許可されません。 |
nest_level |
int | 要求で実行されているコードの現在の入れ子レベル。 NULL 値は許可されません。 |
granted_query_memory |
int | 要求でのクエリの実行に割り当てられたページ数。 NULL 値は許可されません。 |
executing_managed_code |
bit | 特定の要求で、ルーチン、データ型、トリガーなどの共通言語ランタイム オブジェクトが現在実行されているかどうかを示します。 共通言語ランタイム オブジェクトが共通言語ランタイム内から Transact-SQL を実行した場合でも、共通言語ランタイム オブジェクトがスタックにある間は、このパラメーターが必ず設定されます。 NULL 値は許可されません。 |
group_id |
int | このクエリが属しているワークロード グループの ID。 NULL 値は許可されません。 |
query_hash |
binary(8) | クエリで計算され、同様のロジックを持つクエリを識別するために使用される、バイナリのハッシュ値です。 クエリ ハッシュを使用して、リテラル値だけが異なるクエリの全体的なリソース使用率を決定できます。 |
query_plan_hash |
binary(8) | クエリ実行プランで計算され、同様のクエリ実行プランを識別するために使用される、バイナリのハッシュ値です。 クエリ プラン ハッシュを使用して、同様の実行プランを持つクエリの累積コストを確認できます。 |
statement_sql_handle |
varbinary(64) | 適用対象: SQL Server 2014 (12.x) 以降。sql_handle 個々のクエリのデータベースに対してクエリ ストアが有効になっていない場合、この列は NULL です。 |
statement_context_id |
bigint | 適用対象: SQL Server 2014 (12.x) 以降。sys.query_context_settings するオプションの外部キー。データベースに対してクエリ ストアが有効になっていない場合、この列は NULL です。 |
dop |
int | 適用対象: SQL Server 2016 (13.x) 以降。 クエリの並列化の次数。 |
parallel_worker_count |
int | 適用対象: SQL Server 2016 (13.x) 以降。 これが並列クエリである場合の、予約済み並列ワーカーの数。 |
external_script_request_id |
uniqueidentifier | 適用対象: SQL Server 2016 (13.x) 以降。 現在の要求に関連付けられている外部スクリプト要求 ID。 |
is_resumable |
bit | 適用対象: SQL Server 2017 (14.x) 以降。 要求が再開可能なインデックス操作であるかどうかを示します。 |
page_resource |
binary(8) | 適用対象: SQL Server 2019 (15.x)wait_resource 列にページが含まれている場合の、ページ リソースの 8 バイト 16 進数表現。 詳細については、「sys.fn_PageResCracker」を参照してください。 |
page_server_reads |
bigint | 適用対象: Azure SQL Database Hyperscale 要求で実行されたページ サーバー読み取りの数。 NULL 値は許可されません。 |
dist_statement_id |
uniqueidentifier | 適用対象: SQL Server 2022 以降のバージョン、Azure SQL Database、Azure SQL Managed Instance、Azure Synapse Analytics (サーバーレス プールのみ)、および Microsoft Fabric 送信された要求のステートメントの一意の ID。 NULL 値は許可されません。 |
解説
SQL Server の外部のコード (拡張ストアド プロシージャや分散クエリなど) を実行するには、スレッドを非プリエンプティブ スケジューラの制御外で実行する必要があります。 このとき、ワーカーはプリエンプティブ モードに切り替えられます。 この動的管理ビューによって返される時間値には、プリエンプティブ モードで費やされた時間は含まれません。
行モードで並列要求を実行すると、SQL Server によってワーカー スレッドが割り当てられ、割り当てられたタスクを実行するワーカー スレッドが調整されます。 この DMV では、要求に対してコーディネーター スレッドのみが表示されます。 列 reads
、writes
、logical_reads
および row_count
は、コーディネーター スレッドに対して更新されません。 列 wait_type
、wait_time
、last_wait_type
、wait_resource
および granted_query_memory
は、コーディネーター スレッドに対して更新されません。 詳細については、「スレッドおよびタスクのアーキテクチャ ガイド」を参照してください。
wait_resource
列には、sys.dm_tran_locks (Transact-SQL) のresource_description
と同様の情報が含まれていますが、書式設定は異なります。
アクセス許可
ユーザーがサーバーに VIEW SERVER STATE
アクセス許可を持っている場合、ユーザーは SQL Server のインスタンスで実行中のすべてのセッションを表示します。それ以外の場合、ユーザーには現在のセッションのみが表示されます。 VIEW SERVER STATE
は Azure SQL Database では許可できないため、sys.dm_exec_requests
は常に現在の接続に制限されます。
可用性グループのシナリオでは、セカンダリ レプリカが read-intent only に設定されている場合、セカンダリへの接続では、applicationintent=readonly
を追加して、接続文字列パラメーターでそのアプリケーションの意図を指定する必要があります。 それ以外の場合、VIEW SERVER STATE
アクセス許可が存在する場合でも、可用性グループ内のデータベースに対するsys.dm_exec_requests
のアクセス チェックは渡されません。
SQL Server 2022 (16.x) 以降のバージョンでは、 sys.dm_exec_requests
サーバーに対する VIEW SERVER PERFORMANCE STATE 権限が必要です。
例
A. 実行中のバッチのクエリ テキストを検索する
次の例では、sys.dm_exec_requests
をクエリして目的のクエリを検索し、その sql_handle
を出力結果からコピーします。
SELECT * FROM sys.dm_exec_requests;
GO
その後、ステートメント テキストを取得するために、コピーした sql_handle
をシステム関数 sys.dm_exec_sql_text(sql_handle)
と共に使用します。
SELECT * FROM sys.dm_exec_sql_text(< copied sql_handle >);
GO
B. 実行中のバッチが保持しているすべてのロックを見つける
次の例では、sys.dm_exec_requests
をクエリして目的のバッチを検索し、その transaction_id
を出力結果からコピーします。
SELECT * FROM sys.dm_exec_requests;
GO
その後、ロック情報を検索するために、コピーした transaction_id
をシステム関数 sys.dm_tran_locks
と共に使用します。
SELECT * FROM sys.dm_tran_locks
WHERE request_owner_type = N'TRANSACTION'
AND request_owner_id = < copied transaction_id >;
GO
C: 現在ブロックされているすべての要求を検索する
次の例では、sys.dm_exec_requests
をクエリしてブロックされた要求に関する情報を検索します。
SELECT session_id,
status,
blocking_session_id,
wait_type,
wait_time,
wait_resource,
transaction_id
FROM sys.dm_exec_requests
WHERE status = N'suspended';
GO
D. CPU で既存の要求を並べ替える
SELECT
[req].[session_id],
[req].[start_time],
[req].[cpu_time] AS [cpu_time_ms],
OBJECT_NAME([ST].[objectid], [ST].[dbid]) AS [ObjectName],
SUBSTRING(
REPLACE(
REPLACE(
SUBSTRING(
[ST].[text], ([req].[statement_start_offset] / 2) + 1,
((CASE [req].[statement_end_offset]
WHEN -1 THEN DATALENGTH([ST].[text])
ELSE [req].[statement_end_offset]
END - [req].[statement_start_offset]
) / 2
) + 1
), CHAR(10), ' '
), CHAR(13), ' '
), 1, 512
) AS [statement_text]
FROM
[sys].[dm_exec_requests] AS [req]
CROSS APPLY [sys].dm_exec_sql_text([req].[sql_handle]) AS [ST]
ORDER BY
[req].[cpu_time] DESC;
GO
関連するコンテンツ
- システム動的管理ビュー
- 回関連の動的管理ビューおよび関数 (Transact-SQL)
- sys.dm_os_memory_clerks (Transact-SQL)
- sys.dm_os_sys_info (Transact-SQL)
- sys.dm_exec_query_memory_grants (Transact-SQL)
- sys.dm_exec_query_plan (Transact-SQL)
- sys.dm_exec_sql_text (Transact-SQL)
- SQL Server、SQL Statistics オブジェクト
- クエリ処理アーキテクチャ ガイド
- スレッドおよびタスクのアーキテクチャ ガイド
- トランザクションのロックおよび行のバージョン管理ガイド
- SQL Server のブロックの問題の理解と解決