sys.dm_exec_query_stats (Transact-SQL)
キャッシュされたクエリ プランの集計パフォーマンス統計を返します。このビューには、キャッシュされたプラン内のクエリ ステートメントごとに 1 行が含まれており、その行の有効期間はプラン自体に関連付けられています。つまり、プランがキャッシュから削除されると、対応する行もこのビューから削除されます。
注 |
---|
サーバーで現在実行中のワークロードが存在する場合、sys.dm_exec_query_stats の最初のクエリでは不正確な結果が返されることがあります。クエリを再実行すると、より正確な結果を確認できます。 |
列名 |
データ型 |
説明 |
---|---|---|
sql_handle |
varbinary(64) |
クエリが含まれているバッチまたはストアド プロシージャを参照するトークンを指定します。 sql_handle を statement_start_offset および statement_end_offset と共に使用し、sys.dm_exec_sql_text 動的管理関数を呼び出して、クエリの SQL テキストを取得できます。 |
statement_start_offset |
int |
バッチまたは保存されるオブジェクトのテキスト内での、行が示すクエリの開始位置 (バイト単位)。0 で始まります。 |
statement_end_offset |
int |
バッチまたは保存されるオブジェクトのテキスト内での、行が示すクエリの終了位置 (バイト単位)。0 で始まります。値 -1 はバッチの最後を表します。 |
plan_generation_num |
bigint |
再コンパイル後、プランのインスタンスを区別するために使用できるシーケンス番号。 |
plan_handle |
varbinary(64) |
クエリが含まれているコンパイル済みのプランを参照するトークン。この値を sys.dm_exec_query_plan 動的管理関数に渡して、クエリ プランを取得できます。 |
creation_time |
datetime |
プランがコンパイルされた時刻。 |
last_execution_time |
datetime |
前回プランの実行が開始された時刻。 |
execution_count |
bigint |
前回のコンパイル時以降に、プランが実行された回数。 |
total_worker_time |
bigint |
コンパイル後にプランの実行で使用された CPU 時間の合計 (マイクロ秒単位)。ただし、精度はミリ秒単位までです。 |
last_worker_time |
bigint |
プランを前回実行したときに使用された CPU 時間 (マイクロ秒単位)。ただし、精度はミリ秒単位までです。 |
min_worker_time |
bigint |
プランの 1 回の実行で使用された最小 CPU 時間 (マイクロ秒単位)。ただし、精度はミリ秒単位までです。 |
max_worker_time |
bigint |
プランの 1 回の実行で使用された最大 CPU 時間 (マイクロ秒単位)。ただし、精度はミリ秒単位までです。 |
total_physical_reads |
bigint |
コンパイル後にこのプランの実行で行われた物理読み取りの合計数。 |
last_physical_reads |
bigint |
プランを前回実行したときに行われた物理読み取りの数。 |
min_physical_reads |
bigint |
プランの 1 回の実行で行われた物理読み取りの最小数。 |
max_physical_reads |
bigint |
プランの 1 回の実行で行われた物理読み取りの最大数。 |
total_logical_writes |
bigint |
コンパイル後にプランの実行で行われた論理書き込みの合計数。 |
last_logical_writes |
bigint |
プランを前回実行したときに行われた論理書き込みの数。 |
min_logical_writes |
bigint |
プランの 1 回の実行で行われた論理書き込みの最小数。 |
max_logical_writes |
bigint |
プランの 1 回の実行で行われた論理書き込みの最大数。 |
total_logical_reads |
bigint |
コンパイル後にこのプランの実行で行われた論理読み取りの合計数。 |
last_logical_reads |
bigint |
プランを前回実行したときに行われた論理読み取りの数。 |
min_logical_reads |
bigint |
プランの 1 回の実行で行われた論理読み取りの最小数。 |
max_logical_reads |
bigint |
プランの 1 回の実行で行われた論理読み取りの最大数。 |
total_clr_time |
bigint |
このプランがコンパイルされてから、実行時に Microsoft .NET Framework 共通言語ランタイム (CLR) オブジェクト内部で使用された時間 (マイクロ秒単位)。ただし、精度はミリ秒単位までです。CLR オブジェクトには、ストアド プロシージャ、関数、トリガー、型、および集計を指定できます。 |
last_clr_time |
bigint |
このプランの前回の実行中に .NET Framework CLR オブジェクト内で実行に使用された時間 (マイクロ秒単位)。ただし、精度はミリ秒単位までです。CLR オブジェクトには、ストアド プロシージャ、関数、トリガー、型、および集計を指定できます。 |
min_clr_time |
bigint |
プランの 1 回の実行で、.NET Framework CLR オブジェクト内部で使用された最小時間 (マイクロ秒単位)。ただし、精度はミリ秒単位までです。CLR オブジェクトには、ストアド プロシージャ、関数、トリガー、型、および集計を指定できます。 |
max_clr_time |
bigint |
プランの 1 回の実行で、.NET Framework CLR 内部で使用された最大時間 (マイクロ秒単位)。ただし、精度はミリ秒単位までです。CLR オブジェクトには、ストアド プロシージャ、関数、トリガー、型、および集計を指定できます。 |
total_elapsed_time |
bigint |
このプランの実行完了までの経過時間の合計 (マイクロ秒単位)。ただし、精度はミリ秒単位までです。 |
last_elapsed_time |
bigint |
このプランの前回の実行完了までの経過時間 (マイクロ秒単位)。ただし、精度はミリ秒単位までです。 |
min_elapsed_time |
bigint |
任意のプランの実行完了までの最小経過時間 (マイクロ秒単位)。ただし、精度はミリ秒単位までです。 |
max_elapsed_time |
bigint |
任意のプランの実行完了までの最大経過時間 (マイクロ秒単位)。ただし、精度はミリ秒単位までです。 |
query_hash |
binary(8) |
クエリで計算され、同様のロジックを持つクエリを識別するために使用される、バイナリのハッシュ値です。クエリ ハッシュを使用して、リテラル値だけが異なるクエリの全体的なリソース使用率を決定できます。詳細については、「クエリおよびクエリ プラン ハッシュを使用した類似クエリの検索およびチューニング」を参照してください。 |
query_plan_hash |
binary(8) |
クエリ実行プランで計算され、同様のクエリ実行プランを識別するために使用される、バイナリのハッシュ値です。クエリ プラン ハッシュを使用して、同様の実行プランを持つクエリの累積コストを確認できます。詳細については、「クエリおよびクエリ プラン ハッシュを使用した類似クエリの検索およびチューニング」を参照してください。 |
total_rows |
bigint |
クエリによって返される行の合計数。NULL にすることはできません。 |
last_rows |
bigint |
クエリの前回の実行で返された行数。NULL にすることはできません。 |
min_rows |
bigint |
前回のコンパイル時以降に、プランが実行された回数を超える、クエリによって返された行の最小数。NULL にすることはできません。 |
max_rows |
bigint |
前回のコンパイル時以降に、プランが実行された回数を超える、クエリによって返された行の最大数。NULL にすることはできません。 |
権限
サーバーに対する VIEW SERVER STATE 権限が必要です。
説明
ビュー内の統計は、クエリが完了したときに更新されます。
使用例
A. TOP N クエリを確認する
次の例では、CPU の平均時間で順位付けされた上位 5 つのクエリに関する情報を返します。この例では、クエリ ハッシュに従ってクエリを集計して、論理的に等価のクエリを累積リソース使用量別にグループ化しています。
USE AdventureWorks2008R2;
GO
SELECT TOP 5 query_stats.query_hash AS "Query Hash",
SUM(query_stats.total_worker_time) / SUM(query_stats.execution_count) AS "Avg CPU Time",
MIN(query_stats.statement_text) AS "Statement Text"
FROM
(SELECT QS.*,
SUBSTRING(ST.text, (QS.statement_start_offset/2) + 1,
((CASE statement_end_offset
WHEN -1 THEN DATALENGTH(ST.text)
ELSE QS.statement_end_offset END
- QS.statement_start_offset)/2) + 1) AS statement_text
FROM sys.dm_exec_query_stats AS QS
CROSS APPLY sys.dm_exec_sql_text(QS.sql_handle) as ST) as query_stats
GROUP BY query_stats.query_hash
ORDER BY 2 DESC;
GO
B. クエリの行数集計を返す
次の例では、クエリに対して行数の集計情報 (行の総数、最小行数、最大行数、および最後の行) を返します。
SELECT qs.execution_count,
SUBSTRING(qt.text,qs.statement_start_offset/2 +1,
(CASE WHEN qs.statement_end_offset = -1
THEN LEN(CONVERT(nvarchar(max), qt.text)) * 2
ELSE qs.statement_end_offset end -
qs.statement_start_offset
)/2
) AS query_text,
qt.dbid, dbname= DB_NAME (qt.dbid), qt.objectid,
qs.total_rows, qs.last_rows, qs.min_rows, qs.max_rows
FROM sys.dm_exec_query_stats AS qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS qt
WHERE qt.text like '%SELECT%'
ORDER BY qs.execution_count DESC;