sys.dm_exec_requests (Transact-SQL)
適用対象:SQL Server (サポートされているすべてのバージョン)
Azure SQL Database
Azure Synapse Analytics
SQL Server で実行中の各要求に関する情報を返します。 要求の詳細については、「スレッドおよびタスクのアーキテクチャ ガイド」を参照してください。
注意
Azure Synapse Analytics または Analytics Platform System (PDW) 内の専用 SQL プールからこれを呼び出すには、「sys.dm_pdw_exec_requests (Transact-SQL)」を参照してください。 サーバーレス SQL プールの場合は、sys.dm_exec_requests
を使用します。
列名 | データ型 | 説明 |
---|---|---|
session_id | smallint | 要求が関係しているセッションの ID。 Null 許容ではありません。 |
request_id | int | 要求の ID。 セッションのコンテキスト内で一意です。 Null 許容ではありません。 |
start_time | datetime | 要求到着時のタイムスタンプ。 Null 許容ではありません。 |
status | nvarchar(30) | 要求の状態。 値は、次のいずれかです。 バックグラウンド 実行中 実行可能 休止中 Suspended Null 許容ではありません。 |
command | nvarchar(32) | 現在処理中のコマンドの種類。 一般的なコマンドの種類には次の値があります。 SELECT 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 許容ではありません。 |
user_id | int | 要求を送信したユーザーの ID。 Null 許容ではありません。 |
connection_id | uniqueidentifier | 要求を受信した接続の ID。 NULL 値が許可されます。 |
blocking_session_id | smallint | 要求をブロックしているセッションの ID。 この列が NULL または 0 の場合は、要求がブロックされていないか、ブロックしているセッションのセッション情報が使用または識別できません。 詳細については、「SQL Server のブロックの問題を理解して解決する」を参照してください。 -2 = ブロックしているリソースは、孤立した分散トランザクションが所有しています。 -3 = ブロックしているリソースは、遅延復旧トランザクションが所有しています。 -4 = 内部ラッチの状態遷移のため、ブロックしているラッチの所有者のセッション ID を現時点では特定できませんでした。 -5 = ブロック ラッチ所有者のセッション 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 ALTER DATABASE の AUTO_SHRINK オプション 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 値が許可されます。 |
読み取り | bigint | 要求で実行された読み取りの数。 Null 許容ではありません。 |
書き込み | 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 = Repeatable 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 ハンドル。 データベースに対してクエリ ストアが有効になっていない場合、この列は 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 許容ではありません。 |
注釈
SQL Server の外部のコード (拡張ストアド プロシージャや分散クエリなど) を実行するには、スレッドを非プリエンプティブ スケジューラの制御外で実行する必要があります。 このとき、ワーカーはプリエンプティブ モードに切り替えられます。 この動的管理ビューによって返される時間値には、プリエンプティブ モードで費やされた時間は含まれません。
行モードで並列要求を実行すると、SQL Server によってワーカー スレッドが割り当てられ、割り当てられたタスクを実行するワーカー スレッドが調整されます。 この DMV では、要求に対してコーディネーター スレッドのみが表示されます。 列 reads
、writes
、logical_reads
および row_count
は、コーディネーター スレッドに対して更新されません。 列 wait_type
、wait_time
、last_wait_type
、wait_resource
および granted_query_memory
は、コーディネーター スレッドに対して更新されません。 詳細については、「スレッドおよびタスクのアーキテクチャ ガイド」を参照してください。
アクセス許可
ユーザーがサーバーに対する VIEW SERVER STATE
権限を所有している場合は、SQL Server のインスタンスで実行中のすべてのセッションが表示されます。それ以外の場合は、現在のセッションだけが表示されます。 VIEW SERVER STATE
は Azure SQL Database では許可できないため、sys.dm_exec_requests
は常に現在の接続に制限されます。
Always-On のシナリオでは、セカンダリ レプリカが [読み取り目的のみ] に設定されている場合、セカンダリへの接続で applicationintent=readonly
を追加して、接続文字列パラメーターにアプリケーションの意図を指定する必要があります。 そうしないと、sys.dm_exec_requests
のアクセス チェックは、VIEW SERVER 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
, cpu_time 'cpu_time_ms'
, object_name(st.objectid,st.dbid) 'ObjectName'
, substring
(REPLACE
(REPLACE
(SUBSTRING
(ST.text
, (req.statement_start_offset/2) + 1
, (
(CASE 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 cpu_time desc;
GO
関連項目
- 動的管理ビューおよび関数
- 実行関連の動的管理ビューおよび関数
- sys.dm_os_memory_clerks
- sys.dm_os_sys_info
- sys.dm_exec_query_memory_grants
- sys.dm_exec_query_plan
- sys.dm_exec_sql_text
- SQL Server の SQL Statistics オブジェクト
- クエリ処理アーキテクチャ ガイド
- スレッドおよびタスクのアーキテクチャ ガイド