次の方法で共有


sys.dm_exec_query_stats (Transact-SQL)

 

キャッシュされたクエリ プランの集計パフォーマンス統計を SQL Server に返します。 このビューには、キャッシュされたプラン内のクエリ ステートメントごとに 1 行が含まれており、その行の有効期間はプラン自体に関連付けられています。 つまり、プランがキャッシュから削除されると、対応する行もこのビューから削除されます。

注意

サーバーで現在実行中のワークロードが存在する場合、sys.dm_exec_query_stats の最初のクエリでは不正確な結果が返されることがあります。 クエリを再実行すると、より正確な結果を確認できます。

適用対象: SQL Server (SQL Server 2008 から現在のバージョンまで)、Azure AQL データベース。

列名

データ型

説明

sql_handle

varbinary(64)

クエリが含まれているバッチまたはストアド プロシージャを参照するトークンを指定します。

sql_handlestatement_start_offset および statement_end_offset と共に使用し、sys.dm_exec_sql_text 動的管理関数を呼び出して、クエリの SQL テキストを取得できます。

statement_start_offset

int

バッチまたは保存されるオブジェクトのテキスト内での、行が示すクエリの開始位置 (バイト単位)。0 で始まります。

statement_end_offset

int

バッチまたは保存されるオブジェクトのテキスト内での、行が示すクエリの終了位置 (バイト単位)。0 で始まります。SQL Server 2014 より前のバージョンの場合、値 -1 はバッチの末尾を表します。 末尾のコメントは含まれません。

plan_generation_num

bigint

再コンパイル後、プランのインスタンスを区別するために使用できるシーケンス番号。

plan_handle

varbinary(64)

クエリが含まれているコンパイル済みのプランを参照するトークン。 この値を sys.dm_exec_query_plan 動的管理関数に渡して、クエリ プランを取得できます。

ネイティブ コンパイル ストアド プロシージャがメモリ最適化テーブルに対してクエリを実行するときは、常に 0x000 になります。

creation_time

datetime

プランがコンパイルされた時刻。

last_execution_time

datetime

前回プランの実行が開始された時刻。

execution_count

bigint

前回のコンパイル時以降に、プランが実行された回数。

total_worker_time

bigint

コンパイル後にプランの実行で使用された CPU 時間の合計 (マイクロ秒単位)。ただし、精度はミリ秒単位までです。

ネイティブ コンパイル ストアド プロシージャに関して、多くの実行が 1 ミリ秒未満である場合は、total_worker_time は精度が高くない可能性があります。

last_worker_time

bigint

プランを前回実行したときに使用された CPU 時間 (マイクロ秒単位)。ただし、精度はミリ秒単位までです。1

min_worker_time

bigint

プランの 1 回の実行で使用された最小 CPU 時間 (マイクロ秒単位)。ただし、精度はミリ秒単位までです。1

max_worker_time

bigint

プランの 1 回の実行で使用された最大 CPU 時間 (マイクロ秒単位)。ただし、精度はミリ秒単位までです。1

total_physical_reads

bigint

コンパイル後にこのプランの実行で行われた物理読み取りの合計数。

メモリ最適化テーブルに対してクエリを実行するときは、常に 0 になります。

last_physical_reads

bigint

プランを前回実行したときに行われた物理読み取りの数。

メモリ最適化テーブルに対してクエリを実行するときは、常に 0 になります。

min_physical_reads

bigint

プランの 1 回の実行で行われた物理読み取りの最小数。

メモリ最適化テーブルに対してクエリを実行するときは、常に 0 になります。

max_physical_reads

bigint

プランの 1 回の実行で行われた物理読み取りの最大数。

メモリ最適化テーブルに対してクエリを実行するときは、常に 0 になります。

total_logical_writes

bigint

コンパイル後にプランの実行で行われた論理書き込みの合計数。

メモリ最適化テーブルに対してクエリを実行するときは、常に 0 になります。

last_logical_writes

bigint

前回プランが実行されたときにダーティになったバッファー プール ページの数。 ページが既にダーティの場合 (変更された場合)、書き込みはカウントされません。

メモリ最適化テーブルに対してクエリを実行するときは、常に 0 になります。

min_logical_writes

bigint

プランの 1 回の実行で行われた論理書き込みの最小数。

メモリ最適化テーブルに対してクエリを実行するときは、常に 0 になります。

max_logical_writes

bigint

プランの 1 回の実行で行われた論理書き込みの最大数。

メモリ最適化テーブルに対してクエリを実行するときは、常に 0 になります。

total_logical_reads

bigint

コンパイル後にこのプランの実行で行われた論理読み取りの合計数。

メモリ最適化テーブルに対してクエリを実行するときは、常に 0 になります。

last_logical_reads

bigint

プランを前回実行したときに行われた論理読み取りの数。

メモリ最適化テーブルに対してクエリを実行するときは、常に 0 になります。

min_logical_reads

bigint

プランの 1 回の実行で行われた論理読み取りの最小数。

メモリ最適化テーブルに対してクエリを実行するときは、常に 0 になります。

max_logical_reads

bigint

プランの 1 回の実行で行われた論理読み取りの最大数。

メモリ最適化テーブルに対してクエリを実行するときは、常に 0 になります。

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)

クエリ実行プランで計算され、同様のクエリ実行プランを識別するために使用される、バイナリのハッシュ値です。 クエリ プラン ハッシュを使用して、同様の実行プランを持つクエリの累積コストを確認できます。

ネイティブ コンパイル ストアド プロシージャがメモリ最適化テーブルに対してクエリを実行するときは、常に 0x000 になります。

total_rows

bigint

クエリによって返される行の合計数。 NULL にすることはできません。

ネイティブ コンパイル ストアド プロシージャがメモリ最適化テーブルに対してクエリを実行するときは、常に 0 になります。

last_rows

bigint

クエリの前回の実行で返された行数。 NULL にすることはできません。

ネイティブ コンパイル ストアド プロシージャがメモリ最適化テーブルに対してクエリを実行するときは、常に 0 になります。

min_rows

bigint

前回のコンパイル時以降に、プランが実行された回数を超える、クエリによって返される行の最小数。 NULL にすることはできません。

ネイティブ コンパイル ストアド プロシージャがメモリ最適化テーブルに対してクエリを実行するときは、常に 0 になります。

max_rows

bigint

前回のコンパイル時以降に、プランが実行された回数を超える、クエリによって返される行の最大数。 NULL にすることはできません。

ネイティブ コンパイル ストアド プロシージャがメモリ最適化テーブルに対してクエリを実行するときは、常に 0 になります。

statement_sql_handle

varbinary(64)

適用対象: SQL Server 2014 から SQL Server 2014

将来の使用のために予約されています。

statement_context_id

bigint

適用対象: SQL Server 2014 から SQL Server 2014

将来の使用のために予約されています。

1 ネイティブ コンパイル ストアド プロシージャに対する統計コレクションが有効になっている場合は、ワーカー時間がミリ秒単位で収集されます。 クエリが 1 ミリ秒未満で実行された場合は、値は 0 になります。

権限

サーバーに対する VIEW SERVER STATE 権限が必要です。

解説

ビュー内の統計は、クエリが完了したときに更新されます。

使用例

A. TOP N クエリを確認する

次の例では、CPU の平均時間で順位付けされた上位 5 つのクエリに関する情報を返します。 この例では、クエリ ハッシュに従ってクエリを集計して、論理的に等価のクエリを累積リソース使用量別にグループ化しています。

USE AdventureWorks2012; 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;

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;

参照

動的管理ビューおよび関数 (Transact-SQL)
実行関連の動的管理ビューおよび関数 (Transact-SQL)
sys.dm_exec_sql_text (Transact-SQL)
sys.dm_exec_query_plan (Transact-SQL)