実行中の要求の一覧を出力するSQL Server動的管理ビューレファレンス(71)

「Microsoft SQL Server」が稼働するデータベースシステムを運用する管理者に向け、「動的管理ビュー」の活用を軸にしたトラブル対策のためのノウハウを紹介していきます。今回は、実行中の要求の一覧を出力する方法について解説します。

» 2021年12月21日 05時00分 公開
[伊東敏章@IT]

この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。

SQL Server動的管理ビュー一覧

 本連載では、「Microsoft SQL Server(以下、SQL Server)」で使用可能な動的管理ビューについて、動作概要や出力内容などを紹介していきます。今回は動的管理ビュー「sys.dm_exec_requests」における、実行中の要求の一覧を出力する方法について解説します。対応バージョンは、SQL Server(サポートされている全てのバージョン)です。

概要

 SQL Serverでクエリを実行する際には、クエリから実行要求が作成されます。実行要求がタスクとしてワーカーに渡され、ワーカーにスレッドが割り当てられて実行されます。

 「sys.dm_exec_requests」動的管理ビューを使用することで、現在の実行要求の一覧を出力できます。

 「sys.dm_exec_requests」動的管理ビューには、要求が使用したリソースや待機状況、実行時間などの情報が含まれています。また、「sys.dm_exec_requests」動的管理ビューを中心として他の動的管理ビューと組み合わせることで、ステートメントや実行プランなどについても出力できます。そのため、パフォーマンスやブロッキングの問題、クエリの実行状況の調査など、幅広い状況で使用できる動的管理ビューとなっています。

出力内容

列名 データ型 説明
session_id smallint この要求が関連付けられているセッションID
request_id int 要求のID。セッションのコンテキスト内で一意
start_time datetime 要求が到着したときのタイムスタンプ
status nvarchar(30) 要求の状態。種類には次のものがある
 Background
 Running
 Runnable
 Sleeping
 Suspended
command nvarchar(32) 現在処理中のコマンドの種類
一般的なコマンドの種類には次のものがある
 SELECT
 INSERT
 UPDATE
 DELETE
 BACKUP LOG
 BACKUP DATABASE
 DBCC
 FOR

内部システムプロセスの場合には、実行するタスクの種類に基づいた値が設定される
 LOCK MONITOR
 CHECKPOINT
 LAZY WRITER
sql_handle varbinary(64) クエリが含まれているバッチまたはストアドプロシージャを一意に識別するトークン
「sys.dm_exec_sql_text」動的管理関数とともに使用することで要求のテキストを取得できる
statement_start_offset int 要求のテキストに含まれる、現在実行中のステートメントの開始位置までの文字数
「sql_handle」「statement_end_offset」「sys.dm_exec_sql_text」動的管理関数とともに使用することで、要求の現在実行中のステートメントを取得できる
statement_end_offset int 要求のテキストに含まれる、現在実行中のステートメントの終了位置までの文字数
「sql_handle」「statement_start_offset」「sys.dm_exec_sql_text」動的管理関数とともに使用することで、要求の現在実行中のステートメントを取得できる
plan_handle varbinary(64) 現在実行中のバッチのクエリ実行プランを一意に識別するトークン
database_id smallint 要求の実行対象のデータベースID
user_id int 要求を送信したユーザーID
connection_id uniqueidentifier 要求を受信した接続ID
blocking_session_id smallint 要求をブロックしているセッションID
「NULL」または「0」=要求がブロックされていないか、ブロックしているセッションのセッション情報の使用や識別ができない
「-2」=ブロックしているリソースは、孤立した分散トランザクションが所有している
「-3」=ブロックしているリソースは、遅延復旧トランザクションによって所有されている
「-4」=内部ラッチの状態遷移のため、ブロックしているラッチの所有者のセッションIDを現時点で特定できない
wait_type nvarchar(60) 要求が現在ブロックされている場合の待機の種類
待機の種類の詳細については「sys.dm_os_wait_stats」を参照
wait_time int 要求が現在ブロックされている場合の現時点での待機時間(ミリ秒単位)
last_wait_type nvarchar(60) 要求が最後にブロックされていた待機の種類
wait_resource nvarchar(256) 要求が現在待機中のリソース
open_transaction_count int この要求に対して開いているトランザクションの数
open_resultset_count int この要求に対して開いている結果セットの数
transaction_id bigint 要求が実行されるトランザクションのID
context_info varbinary(128) セッションの「CONTEXT_INFO」値
percent_complete real 次のコマンドの実行中に、既に完了した作業の割合
 ALTER INDEX REORGANIZE
 ALTER DATABASEのAUTO_SHRINKオプション
 BACKUP DATABASE
 DBCC CHECKDB
 DBCC CHECKFILEGROUP
 DBCC CHECKTABLE
 DBCC INDEXDEFRAG
 DBCC SHRINKDATABASE
 DBCC SHRINKFILE
 RCOVERY
 RESTORE DATABASE
 ROLLBACK
 TDE ENCRYPTION
estimated_completion_time bigint 内部のみで使用
cpu_time int 要求で使用されたCPU時間(ミリ秒単位)
total_elapsed_time int 要求を受信してから経過した総時間(ミリ秒単位)
scheduler_id int この要求のスケジュールを設定しているスケジューラID
task_address varbinary(8) この要求に関連付けられているタスクに割り当てられたメモリアドレス
reads bigint 要求で実行された読み取りの数
writes bigint 要求で実行された書き込みの数
logical_reads bigint 要求で実行された論理読み取りの数
text_size int 要求の「TEXTSIZE」設定
language nvarchar(128) 要求の言語設定
date_format nvarchar(3) 要求の「DATEFORMAT」設定
date_first smallint 要求の「DATEFIRST」設定
quoted_identifier bit 「QUOTED_IDENTIFIER」の設定
 「1」=ON
 「0」=OFF
arithabort bit 「ARITHABORT」の設定
 「1」=ON
 「0」=OFF
ansi_null_dflt_on bit 「ANSI_NULL_DFLT_ON」の設定
 「1」=ON
 「0」=OFF
ansi_defaults bit 「ANSI_DEFAULTS」の設定
 「1」=ON
 「0」=OFF
ansi_warnings bit 「ANSI_WARNINGS」の設定
 「1」=ON
 「0」=OFF
ansi_padding bit 「ANSI_PADDING」の設定
 「1」=ON
 「0」=OFF
ansi_nulls bit 「ANSI_NULLS」の設定
 「1」=ON
 「0」=OFF
concat_null_yields_null bit 「CONCAT_NULL_YIELDS_NULL」の設定
 「1」=ON
 「0」=OFF
transaction_isolation_level smallint この要求のトランザクションに使用された分離レベル
 「0」=Unspecified
 「1」=ReadUncomitted
 「2」=ReadCommitted
 「3」=Repeatable
 「4」=Serializable
 「5」=Snapshot
lock_timeout int 要求のロックタイムアウトまでの時間(ミリ秒単位)
deadlock_priority int 要求の「DEADLOCK_PRIORITY」設定
row_count bigint この要求によってクライアントに返された行の数
prev_error int 要求の実行中に発生した最後のエラー
nest_level int 要求で実行されているコードの現在の入れ子レベル
granted_query_memory int 要求でのクエリの実行に割り当てられたページ数
executing_managed_code bit 共通言語ランタイムオブジェクトが現在実行されているかどうか
group_id int クエリが属しているワークロードグループのID
query_hash binary(8) クエリで計算された、同様のロジックを持つクエリを識別するために使用されるハッシュ値
query_plan_hash binary(8) クエリ実行プランで計算された、同様のクエリ実行プランを識別するために使用されるハッシュ値
statement_sql_handle varbinary(64) 対象:SQL Server 2014以降
個々のクエリのSQLハンドル。データベースに対してクエリストアが有効になっていない場合は「NULL」
statement_context_id bigint 対象:SQL Server 2014以降
「Query_context_settings」の外部キー。データベースに対してクエリストアが有効になっていない場合は「NULL」
dop int 対象:SQL Server 2016以降
クエリの並列処理の次数
parallel_worker_count int 対象:SQL Server 2016以降
並列クエリの場合、予約済みの並列ワーカーの数
external_script_request_id uniqueidentifier 対象:SQL Server 2016以降
現在の要求に関連付けられている外部スクリプト要求ID
is_resumable bit 対象:SQL Server 2017以降
要求が再開可能なインデックス操作であるかどうか
page_resource binary(8) 対象:SQL Server 2019以降
「wait_resource」列にページが含まれている場合、ページリソースの8バイトの16進数表現
詳細は「sys. fn_PageResCracker」を参照
page_server_reads bigint 対象:Azure SQL Databaseハイパースケール
この要求によって実行されたページサーバの読み取り回数

動作例

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。