sys.dm_exec_query_stats (Transact-SQL)

適用対象: はいSQL Server (サポートされているすべてのバージョン) はいAzure SQL データベース

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

注意

  • データには完了したクエリだけが反映され、まだ処理中ではないため、 sys.dm_exec_query_stats の結果は実行ごとに異なる場合があります。
  • またはの専用 SQL プールからこれを呼び出すに Azure Synapse Analytics は Parallel Data Warehouse 、 sys.dm_pdw_nodes_exec_query_stats という名前を使用します。 サーバーレス SQL プールの場合は sys.dm_exec_query_stats を使用します。
列名 データ型 説明
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 (12.x) 、値-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 (CLR) オブジェクト内で使用される時間 (マイクロ秒単位で報告されますが、正確なミリ秒のみ .NET Framework )。 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 1 回の実行中にクエリによって返された行の最小数。 null にすることはできません。

ネイティブ コンパイル ストアド プロシージャがメモリ最適化テーブルに対してクエリを実行するときは、常に 0 になります。
max_rows bigint 1 回の実行中にクエリによって返された最大行数。 null にすることはできません。

ネイティブ コンパイル ストアド プロシージャがメモリ最適化テーブルに対してクエリを実行するときは、常に 0 になります。
statement_sql_handle varbinary(64) 適用対象: SQL Server 2014 (12.x) 以降。

NULL 以外の値が設定されているのは、クエリ ストアが有効になっていて、その特定のクエリの統計を収集する場合のみです。
statement_context_id bigint 適用対象: SQL Server 2014 (12.x) 以降。

NULL 以外の値が設定されているのは、クエリ ストアが有効になっていて、その特定のクエリの統計を収集する場合のみです。
total_dop bigint このプランがコンパイルされた後に使用された並列処理の次数の合計。 メモリ最適化テーブルに対してクエリを実行する場合は、常に 0 になります。

適用対象: SQL Server 2016 (13.x) 以降。
last_dop bigint このプランが前回実行された場合の並列処理の次数。 メモリ最適化テーブルに対してクエリを実行する場合は、常に 0 になります。

適用対象: SQL Server 2016 (13.x) 以降。
min_dop bigint このプランが 1 回の実行中に使用した並列処理の最小次数。 メモリ最適化テーブルに対してクエリを実行する場合は、常に 0 になります。

適用対象: SQL Server 2016 (13.x) 以降。
max_dop bigint このプランが 1 回の実行中に使用した並列処理の最大限度。 メモリ最適化テーブルに対してクエリを実行する場合は、常に 0 になります。

適用対象: SQL Server 2016 (13.x) 以降。
total_grant_kb bigint このプランがコンパイルされた後に受け取った予約済みメモリ許可の合計量 (KB 単位)。 メモリ最適化テーブルに対してクエリを実行する場合は、常に 0 になります。

適用対象: SQL Server 2016 (13.x) 以降。
last_grant_kb bigint このプランが前回実行された場合の予約済みメモリ許可の量 (KB 単位)。 メモリ最適化テーブルに対してクエリを実行する場合は、常に 0 になります。

適用対象: SQL Server 2016 (13.x) 以降。
min_grant_kb bigint このプランが 1 回の実行中に受け取った予約済みメモリ許可の最小量 (KB 単位)。 メモリ最適化テーブルに対してクエリを実行する場合は、常に 0 になります。

適用対象: SQL Server 2016 (13.x) 以降。
max_grant_kb bigint このプランが 1 回の実行中に受け取った予約済みメモリ許可の最大量 (KB 単位)。 メモリ最適化テーブルに対してクエリを実行する場合は、常に 0 になります。

適用対象: SQL Server 2016 (13.x) 以降。
total_used_grant_kb bigint このプランがコンパイルされた後に使用された予約済みメモリ許可の合計量 (KB 単位)。 メモリ最適化テーブルに対してクエリを実行する場合は、常に 0 になります。

適用対象: SQL Server 2016 (13.x) 以降。
last_used_grant_kb bigint このプランが前回実行された場合のメモリ許可の使用量 (KB 単位)。 メモリ最適化テーブルに対してクエリを実行する場合は、常に 0 になります。

適用対象: SQL Server 2016 (13.x) 以降。
min_used_grant_kb bigint このプランが 1 回の実行中に使用したメモリ許可の最小量 (KB 単位)。 メモリ最適化テーブルに対してクエリを実行する場合は、常に 0 になります。

適用対象: SQL Server 2016 (13.x) 以降。
max_used_grant_kb bigint このプランが 1 回の実行中に使用したメモリ許可の最大使用量 (KB 単位)。 メモリ最適化テーブルに対してクエリを実行する場合は、常に 0 になります。

適用対象: SQL Server 2016 (13.x) 以降。
total_ideal_grant_kb bigint コンパイル後に推定されるこのプランの理想的なメモリ許可の合計量 (KB 単位)。 メモリ最適化テーブルに対してクエリを実行する場合は、常に 0 になります。

適用対象: SQL Server 2016 (13.x) 以降。
last_ideal_grant_kb bigint このプランが前回実行された場合の、理想的なメモリ許可の量 (KB 単位)。 メモリ最適化テーブルに対してクエリを実行する場合は、常に 0 になります。

適用対象: SQL Server 2016 (13.x) 以降。
min_ideal_grant_kb bigint このプランが 1 回の実行中に推定した、理想的なメモリ許可の最小量 (KB 単位)。 メモリ最適化テーブルに対してクエリを実行する場合は、常に 0 になります。

適用対象: SQL Server 2016 (13.x) 以降。
max_ideal_grant_kb bigint このプランが 1 回の実行中に推定した、理想的なメモリ許可の最大量 (KB 単位)。 メモリ最適化テーブルに対してクエリを実行する場合は、常に 0 になります。

適用対象: SQL Server 2016 (13.x) 以降。
total_reserved_threads bigint このプランがコンパイル後に使用した予約済み並列スレッドの合計。 メモリ最適化テーブルに対してクエリを実行する場合は、常に 0 になります。

適用対象: SQL Server 2016 (13.x) 以降。
last_reserved_threads bigint このプランが前回実行された場合の予約済み並列スレッドの数。 メモリ最適化テーブルに対してクエリを実行する場合は、常に 0 になります。

適用対象: SQL Server 2016 (13.x) 以降。
min_reserved_threads bigint このプランが 1 回の実行中に使用した予約済み並列スレッドの最小数。 メモリ最適化テーブルに対してクエリを実行する場合は、常に 0 になります。

適用対象: SQL Server 2016 (13.x) 以降。
max_reserved_threads bigint このプランが 1 回の実行中に使用した予約済み並列スレッドの最大数。 メモリ最適化テーブルに対してクエリを実行する場合は、常に 0 になります。

適用対象: SQL Server 2016 (13.x) 以降。
total_used_threads bigint このプランがコンパイル後に使用した、使用された並列スレッドの合計。 メモリ最適化テーブルに対してクエリを実行する場合は、常に 0 になります。

適用対象: SQL Server 2016 (13.x) 以降。
last_used_threads bigint このプランが前回実行された場合に使用された並列スレッドの数。 メモリ最適化テーブルに対してクエリを実行する場合は、常に 0 になります。

適用対象: SQL Server 2016 (13.x) 以降。
min_used_threads bigint このプランが 1 回の実行中に使用した並列スレッドの最小数。 メモリ最適化テーブルに対してクエリを実行する場合は、常に 0 になります。

適用対象: SQL Server 2016 (13.x) 以降。
max_used_threads bigint このプランが 1 回の実行中に使用した並列スレッドの最大数。 メモリ最適化テーブルに対してクエリを実行する場合は、常に 0 になります。

適用対象: SQL Server 2016 (13.x) 以降。
total_columnstore_segment_reads bigint クエリによって読み取った列ストア セグメントの合計。 null にすることはできません。

適用対象: SP2 および SQL Server 2016 (13.x) SQL Server 2017 (14.x) CU3 から
last_columnstore_segment_reads bigint クエリが最後に実行されたときに読み取られた列ストアセグメントの数。 null にすることはできません。

適用対象: SQL Server 2016 (13.x) SP2 および CU3 以降 SQL Server 2017 (14.x)
min_columnstore_segment_reads bigint 1回の実行中にクエリによって読み取られた列ストアセグメントの最小数。 null にすることはできません。

適用対象: SQL Server 2016 (13.x) SP2 および CU3 以降 SQL Server 2017 (14.x)
max_columnstore_segment_reads bigint 1回の実行中にクエリによって読み取られた列ストアセグメントの最大数。 null にすることはできません。

適用対象: SQL Server 2016 (13.x) SP2 および CU3 以降 SQL Server 2017 (14.x)
total_columnstore_segment_skips bigint クエリでスキップされた列ストアセグメントの合計合計。 null にすることはできません。

適用対象: SQL Server 2016 (13.x) SP2 および CU3 以降 SQL Server 2017 (14.x)
last_columnstore_segment_skips bigint クエリの最後の実行でスキップされた列ストアセグメントの数。 null にすることはできません。

適用対象: SQL Server 2016 (13.x) SP2 および CU3 以降 SQL Server 2017 (14.x)
min_columnstore_segment_skips bigint 1回の実行中にクエリによってスキップされた列ストアセグメントの最小数。 null にすることはできません。

適用対象: SQL Server 2016 (13.x) SP2 および CU3 以降 SQL Server 2017 (14.x)
max_columnstore_segment_skips bigint 1回の実行中にクエリによってスキップされた列ストアセグメントの最大数。 null にすることはできません。

適用対象: SQL Server 2016 (13.x) SP2 および CU3 以降 SQL Server 2017 (14.x)
total_spills bigint コンパイル後にこのクエリの実行によって書き込まれたページの合計数。

適用対象: SQL Server 2016 (13.x) SP2 および CU3 以降 SQL Server 2017 (14.x)
last_spills bigint クエリが最後に実行されたときに書き込まれたページの数。

適用対象: SQL Server 2016 (13.x) SP2 および CU3 以降 SQL Server 2017 (14.x)
min_spills bigint このクエリで1回の実行中に書き込まれたページの最小数。

適用対象: SQL Server 2016 (13.x) SP2 および CU3 以降 SQL Server 2017 (14.x)
max_spills bigint このクエリで1回の実行中に書き込まれたページの最大数。

適用対象: SQL Server 2016 (13.x) SP2 および CU3 以降 SQL Server 2017 (14.x)
pdw_node_id int このディストリビューションが配置されているノードの識別子。

適用対象: Azure Synapse Analytics 、 Parallel Data Warehouse
total_page_server_reads bigint このプランがコンパイルされてから、このプランの実行でリモートページサーバーの読み取り回数の合計。

適用対象: Azure SQL Database ハイパースケール
last_page_server_reads bigint プランを最後に実行したときに実行されたリモートページサーバーの読み取り回数。

適用対象: Azure SQL Database ハイパースケール
min_page_server_reads bigint このプランの1回の実行で行われたリモートページサーバー読み取りの最小数。

適用対象: Azure SQL Database ハイパースケール
max_page_server_reads bigint このプランで1回の実行で行われたリモートページサーバー読み取りの最大数。

適用対象: Azure SQL Database ハイパースケール

注意

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

アクセス許可

で SQL Server は、 VIEW SERVER STATE 権限が必要です。
SQL Database Basic、S0、S1 のサービス目標、およびエラスティックプール内のデータベースについては、 サーバー管理者 アカウントまたは Azure Active Directory 管理者 アカウントが必要です。 その他のすべての SQL Database サービスの目的で VIEW DATABASE STATE は、データベースで権限が必要になります。

解説

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

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

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

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)
sys.dm_exec_sql_text (Transact-sql)
sys.dm_exec_query_plan (Transact-sql)
sys.dm_exec_procedure_stats (Transact-sql)
sys.dm_exec_trigger_stats (Transact-sql)
sys.dm_exec_cached_plans (Transact-SQL)