連載
実行中の要求の一覧を出力する:SQL Server動的管理ビューレファレンス(71)
「Microsoft 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.
関連記事
- SQL Serverの動的管理ビューとは?
「Microsoft SQL Server」が稼働するデータベースシステムを運用する管理者に向け、「動的管理ビュー」の活用を軸にしたトラブル対策のためのノウハウを紹介していきます。 - 「DMV(Dynamic Management View)」でパフォーマンス遅延の「原因」を調べる
本連載は、「Microsoft SQL Server」で発生するトラブルを「どんな方法で」「どのように」解決していくか、正しい対処のためのノウハウを紹介します。今回は、「処理遅延の原因を追求する“DMVの使い方”」を説明します。 - SQL Serverの動きを制御する「トレースフラグ」とは何か
「Microsoft SQL Server」が稼働するデータベースシステムを運用する管理者に向け、「トレースフラグ」の活用を軸にしたトラブル対策のためのノウハウを紹介していきます。初回は「トレースフラグとはそもそも何か」を解説します。