sys.dm_exec_requests (Transact-SQL)

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics 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
実行中
実行可能
休止中
suspended

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_handlestatement_end_offsetsys.dm_exec_sql_text 動的管理関数と共に使用して、要求に対して現在実行中のステートメントを取得できます。 Null 許容。
statement_end_offset int バッチまたは保存されるオブジェクトのテキスト内での、行が示すクエリの終了位置 (バイト単位)。0 で始まります。 sql_handlestatement_start_offsetsys.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_id0されていました。

ワークロードによっては、観察が 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 実質 次のコマンドで完了した作業の割合。

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 = ReadUncomitted
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 では、要求に対してコーディネーター スレッドのみが表示されます。 列 readswriteslogical_reads および row_count は、コーディネーター スレッドに対して更新されません。 列 wait_typewait_timelast_wait_typewait_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 は常に現在の接続に制限されます。

可用性グループのシナリオでは、セカンダリ レプリカが読み取り専用設定されている場合、セカンダリへの接続では、追加してapplicationintent=readonly、接続文字列パラメーターでそのアプリケーションの意図を指定する必要があります。 それ以外の場合、アクセス許可sys.dm_exec_requestsが存在する場合VIEW SERVER STATEでも、可用性グループ内のデータベースに対するアクセスチェックは渡されません。

SQL Server 2022 (16.x) 以降のバージョンでは、sys.dm_exec_requestsサーバーに対する VIEW Standard Edition RVER 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