sys.dm_exec_query_stats (Transact-SQL)
Retourne les statistiques sur les performances des agrégats pour les plans de requêtes mis en cache dans SQL Server 2012. La vue contient une ligne par instruction de requête dans le plan en cache et la durée de vie des lignes est liée au plan lui-même. Lorsqu'un plan est supprimé du cache, les lignes correspondantes sont éliminées de cette vue.
[!REMARQUE]
Une requête initiale de sys.dm_exec_query_stats peut produire des résultats inexacts si une charge de travail est actuellement exécutée sur le serveur. Des résultats plus précis peuvent être déterminés en réexécutant la requête.
Nom de la colonne |
Type de données |
Description |
---|---|---|
sql_handle |
varbinary(64) |
Est un jeton qui fait référence au traitement ou à la procédure stockée dont fait partie la requête. sql_handle, combiné avec statement_start_offset et statement_end_offset, peut s'utiliser pour extraire le texte SQL de la requête en appelant la fonction de gestion dynamique sys.dm_exec_sql_text. |
statement_start_offset |
int |
Indique, en octets, la position de début (à partir de 0) de la requête que la ligne décrit dans le texte de son traitement ou de son objet persistant. |
statement_end_offset |
int |
Indique, en octets, la position de fin (à partir de 0) de la requête que la ligne décrit dans le texte de son traitement ou de son objet persistant. La valeur -1 indique la fin du traitement. |
plan_generation_num |
bigint |
Numéro de séquence permettant de distinguer les instances de plans après une recompilation. |
plan_handle |
varbinary(64) |
Jeton qui fait référence au plan compilé dont fait partie la requête. Cette valeur peut être passée à la fonction de gestion dynamique sys.dm_exec_query_plan pour obtenir le plan de requête. |
creation_time |
datetime |
Heure de compilation du plan. |
last_execution_time |
datetime |
Heure de début de la dernière exécution du plan. |
execution_count |
bigint |
Nombre d'exécutions du plan depuis sa dernière compilation. |
total_worker_time |
bigint |
Temps processeur total, indiqué en microsecondes (mais précis uniquement en millisecondes), utilisé par les exécutions de ce plan depuis sa compilation. |
last_worker_time |
bigint |
Temps processeur, indiqué en microsecondes (mais précis uniquement en millisecondes), utilisé lors de la dernière exécution du plan. |
min_worker_time |
bigint |
Temps processeur minimum, indiqué en microsecondes (mais précis uniquement en millisecondes), jamais utilisé par ce plan en une seule exécution. |
max_worker_time |
bigint |
Temps processeur maximum, indiqué en microsecondes (mais précis uniquement en millisecondes), jamais utilisé par ce plan en une seule exécution. |
total_physical_reads |
bigint |
Nombre total de lectures physiques effectuées par les exécutions de ce plan depuis sa compilation. |
last_physical_reads |
bigint |
Nombre de lectures physiques effectuées lors de la dernière exécution du plan. |
min_physical_reads |
bigint |
Nombre minimal de lectures physiques effectuées par ce plan lors d'une seule exécution. |
max_physical_reads |
bigint |
Nombre maximal de lectures physiques effectuées par ce plan lors d'une seule exécution. |
total_logical_writes |
bigint |
Nombre total d'écritures logiques effectuées par les exécutions de ce plan depuis sa compilation. |
last_logical_writes |
bigint |
Numéro du nombre de pages du pool de mémoires tampons modifiées lors de la dernière exécution du plan. Si une page est déjà modifiée, aucune écriture n'est comptée. |
min_logical_writes |
bigint |
Nombre minimal d'écritures logiques effectuées par ce plan lors d'une seule exécution. |
max_logical_writes |
bigint |
Nombre maximal d'écritures logiques effectuées par ce plan lors d'une seule exécution. |
total_logical_reads |
bigint |
Nombre total de lectures logiques effectuées par les exécutions de ce plan depuis sa compilation. |
last_logical_reads |
bigint |
Nombre de lectures logiques effectuées lors de la dernière exécution du plan. |
min_logical_reads |
bigint |
Nombre minimal de lectures logiques effectuées par ce plan lors d'une seule exécution. |
max_logical_reads |
bigint |
Nombre maximal de lectures logiques effectuées par ce plan lors d'une seule exécution. |
total_clr_time |
bigint |
Temps, indiqué en microsecondes (mais précis uniquement en millisecondes), utilisé dans les objets CLR (Common Language Runtime) Microsoft .NET Framework par les exécutions de ce plan depuis sa compilation. Les objets CLR peuvent être des procédures stockées, des fonctions, des déclencheurs, des types et des agrégats. |
last_clr_time |
bigint |
Temps, indiqué en microsecondes (mais précis uniquement en millisecondes), utilisé par l'exécution dans les objets CLR .NET Framework pendant la dernière exécution de ce plan. Les objets CLR peuvent être des procédures stockées, des fonctions, des déclencheurs, des types et des agrégats. |
min_clr_time |
bigint |
Temps minimum, indiqué en microsecondes (mais précis uniquement en millisecondes), jamais utilisé par ce plan dans les objets CLR .NET Framework en une seule exécution. Les objets CLR peuvent être des procédures stockées, des fonctions, des déclencheurs, des types et des agrégats. |
max_clr_time |
bigint |
Temps maximum, indiqué en microsecondes (mais précis uniquement en millisecondes), jamais utilisé par ce plan dans les objets CLR .NET Framework en une seule exécution. Les objets CLR peuvent être des procédures stockées, des fonctions, des déclencheurs, des types et des agrégats. |
total_elapsed_time |
bigint |
Temps total écoulé, indiqué en microsecondes (mais précis uniquement en millisecondes), pour les exécutions de ce plan. |
last_elapsed_time |
bigint |
Temps écoulé, indiqué en microsecondes (mais précis uniquement en millisecondes), pour la dernière exécution de ce plan. |
min_elapsed_time |
bigint |
Temps minimum écoulé, indiqué en microsecondes (mais précis uniquement en millisecondes), pour les différentes exécutions de ce plan. |
max_elapsed_time |
bigint |
Temps maximum écoulé, indiqué en microsecondes (mais précis uniquement en millisecondes), pour les différentes exécutions de ce plan. |
query_hash |
Binary(8) |
La valeur de hachage binaire calculée sur la requête et utilisée pour identifier des requêtes avec une logique similaire. Vous pouvez utiliser le hachage de requête pour déterminer l'utilisation des ressources globale pour les requêtes qui diffèrent uniquement par les valeurs littérales. |
query_plan_hash |
binary(8) |
Valeur de hachage binaire calculée sur le plan d'exécution de requête et utilisée pour identifier des plans d'exécution de requête semblables. Vous pouvez utiliser le hachage de plan de requête pour rechercher le coût cumulatif de requêtes avec les plans d'exécution semblables. |
total_rows |
bigint |
Nombre total de lignes renvoyées par la requête. Ne peut pas être NULL. |
last_rows |
bigint |
Nombre de lignes renvoyées par la dernière exécution de la requête. Ne peut pas être NULL. |
min_rows |
bigint |
Nombre minimal de lignes retournées par la requête sur le nombre de fois où le plan a été exécuté depuis sa dernière compilation. Ne peut pas être NULL. |
max_rows |
bigint |
Nombre maximal de lignes retournées par la requête sur le nombre de fois où le plan a été exécuté depuis sa dernière compilation. Ne peut pas être NULL. |
Autorisations
Nécessite l'autorisation VIEW SERVER STATE sur le serveur.
Notes
Les statistiques de la vue sont actualisées lorsqu'une requête est terminée.
Exemples
A.Recherche des N premières requêtes (TOP N)
L'exemple suivant retourne des informations sur les cinq premières requêtes classées d'après le temps processeur moyen. Cet exemple regroupe les requêtes d'après leur hachage de requête afin que les requêtes logiquement équivalentes soient groupées par leur consommation de ressources cumulative.
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;
GO
B.Retour des agrégats de nombre de lignes à une requête
L'exemple suivant retourne les informations d'agrégation du nombre de lignes (nombre total de lignes, nombre minimal de lignes, nombre maximal de lignes et dernières lignes) pour les requêtes.
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;
Voir aussi
Référence
Fonctions et vues de gestion dynamique (Transact-SQL)
Fonctions et vues de gestion dynamique relatives à l'exécution (Transact-SQL)