sys.dm_exec_query_stats (Transact-SQL)
S’applique à :SQL ServerAzure SQL DatabaseAzure SQL Managed Instance
Retourne des statistiques de performances agrégées pour les plans de requête mis en cache dans SQL Server. 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.
Les résultats de sys.dm_exec_query_stats
peuvent varier avec chaque exécution, car les données reflètent uniquement les requêtes terminées, et non celles en cours d’exécution.
Pour appeler cette DMV à partir d’un pool SQL dédié dans Azure Synapse Analytics ou Analytics Platform System (PDW), utilisez le nom sys.dm_pdw_nodes_exec_query_stats
. Pour le pool SQL serverless, utilisez sys.dm_exec_query_stats
.
Nom de la colonne | Type de données | Description |
---|---|---|
sql_handle |
varbinary(64) | Jeton qui identifie de manière unique le lot ou la procédure stockée dont fait partie la requête.sql_handle , ainsi que statement_start_offset et statement_end_offset , peuvent être utilisés pour récupérer 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. Pour les versions antérieures à SQL Server 2014 (12.x), la valeur -1 indique la fin du lot. Les commentaires de fin ne sont plus inclus. |
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 identifie de façon unique un plan d’exécution de requête pour un lot qui a été exécuté et son plan réside dans le cache du plan ou qui est en cours d’exécution. Cette valeur peut être transmise à la fonction de gestion dynamique sys.dm_exec_query_plan pour obtenir le plan de requête. Toujours 0x000 lorsqu’une procédure stockée compilée en mode natif interroge une table optimisée en mémoire. |
creation_time |
datetime | Heure de compilation du plan. L’heure est enregistrée dans le fuseau horaire actuel . |
last_execution_time |
datetime | Heure de début de la dernière exécution du plan. L’heure est enregistrée dans le fuseau horaire actuel . |
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. Pour les procédures stockées compilées en mode natif, total_worker_time peut ne pas être précise si de nombreuses exécutions prennent moins de 1 milliseconde. |
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. 1 |
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. 1 |
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. 1 |
total_physical_reads |
bigint | Nombre total de lectures physiques effectuées par les exécutions de ce plan depuis sa compilation. Toujours 0 lors de l’interrogation d’une table optimisée en mémoire. |
last_physical_reads |
bigint | Nombre de lectures physiques effectuées lors de la dernière exécution du plan. Toujours 0 lors de l’interrogation d’une table optimisée en mémoire. |
min_physical_reads |
bigint | Nombre minimal de lectures physiques effectuées par ce plan lors d'une seule exécution. Toujours 0 lors de l’interrogation d’une table optimisée en mémoire. |
max_physical_reads |
bigint | Nombre maximal de lectures physiques effectuées par ce plan lors d'une seule exécution. Toujours 0 lors de l’interrogation d’une table optimisée en mémoire. |
total_logical_writes |
bigint | Nombre total d'écritures logiques effectuées par les exécutions de ce plan depuis sa compilation. Toujours 0 lors de l’interrogation d’une table optimisée en mémoire. |
last_logical_writes |
bigint | Nombre de pages de pool de mémoires tampons endommagées lors de l’exécution la plus récente du plan. Une fois qu’une page est lue, la page devient sale uniquement la première fois qu’elle a été modifiée. Lorsqu’une page devient sale, ce nombre est incrémenté. Les modifications suivantes d’une page déjà sale n’affectent pas ce nombre. Ce nombre 0 toujours lors de l’interrogation d’une table optimisée en mémoire. |
min_logical_writes |
bigint | Nombre minimal d'écritures logiques effectuées par ce plan lors d'une seule exécution. Toujours 0 lors de l’interrogation d’une table optimisée en mémoire. |
max_logical_writes |
bigint | Nombre maximal d'écritures logiques effectuées par ce plan lors d'une seule exécution. Toujours 0 lors de l’interrogation d’une table optimisée en mémoire. |
total_logical_reads |
bigint | Nombre total de lectures logiques effectuées par les exécutions de ce plan depuis sa compilation. Toujours 0 lors de l’interrogation d’une table optimisée en mémoire. |
last_logical_reads |
bigint | Nombre de lectures logiques effectuées lors de la dernière exécution du plan. Toujours 0 lors de l’interrogation d’une table optimisée en mémoire. |
min_logical_reads |
bigint | Nombre minimal de lectures logiques effectuées par ce plan lors d'une seule exécution. Toujours 0 lors de l’interrogation d’une table optimisée en mémoire. |
max_logical_reads |
bigint | Nombre maximal de lectures logiques effectuées par ce plan lors d'une seule exécution. Toujours 0 lors de l’interrogation d’une table optimisée en mémoire. |
total_clr_time |
bigint | Heure, signalée en microsecondes (mais exactes à millisecondes), consommées à l’intérieur des objets CLR (Common Language Runtime) microsoft .NET Framework par 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, signalé en microsecondes (mais uniquement précis en millisecondes) consommés par l’exécution à l’intérieur d’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 | Durée minimale, signalée en microsecondes (mais exacte à millisecondes seulement), que ce plan a jamais consommé à l’intérieur des objets CLR .NET Framework pendant 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 | Durée maximale, signalée en microsecondes (mais exacte à millisecondes seulement), que ce plan a jamais consommé à l’intérieur du CLR .NET Framework pendant 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. Toujours 0x000 lorsqu’une procédure stockée compilée en mode natif interroge une table optimisée en mémoire. |
total_rows |
bigint | Nombre total de lignes renvoyées par la requête. Ne peut pas être null. Toujours 0 lorsqu’une procédure stockée compilée en mode natif interroge une table optimisée en mémoire. |
last_rows |
bigint | Nombre de lignes renvoyées par la dernière exécution de la requête. Ne peut pas être null. Toujours 0 lorsqu’une procédure stockée compilée en mode natif interroge une table optimisée en mémoire. |
min_rows |
bigint | Nombre minimal de lignes jamais retournées par la requête pendant une exécution. Ne peut pas être null. Toujours 0 lorsqu’une procédure stockée compilée en mode natif interroge une table optimisée en mémoire. |
max_rows |
bigint | Nombre maximal de lignes jamais retournées par la requête pendant une exécution. Ne peut pas être null. Toujours 0 lorsqu’une procédure stockée compilée en mode natif interroge une table optimisée en mémoire. |
statement_sql_handle |
varbinary(64) |
s’applique à: SQL Server 2014 (12.x) et versions ultérieures. Renseigné avec des valeurs non NULL uniquement si Magasin des requêtes est activé et collecte des statistiques pour cette requête particulière. |
statement_context_id |
bigint |
s’applique à: SQL Server 2014 (12.x) et versions ultérieures. Renseigné avec des valeurs non NULL uniquement si Magasin des requêtes est activé et collecte des statistiques pour cette requête particulière. |
total_dop |
bigint | Somme totale du degré de parallélisme utilisé par ce plan depuis sa compilation. Toujours 0 pour interroger une table optimisée en mémoire.s’applique à: SQL Server 2016 (13.x) et versions ultérieures. |
last_dop |
bigint | Degré de parallélisme lorsque ce plan a exécuté la dernière fois. Toujours 0 pour interroger une table optimisée en mémoire.s’applique à: SQL Server 2016 (13.x) et versions ultérieures. |
min_dop |
bigint | Degré minimal de parallélisme que ce plan n’a jamais utilisé pendant une exécution. Toujours 0 pour interroger une table optimisée en mémoire.s’applique à: SQL Server 2016 (13.x) et versions ultérieures. |
max_dop |
bigint | Degré maximal de parallélisme que ce plan n’a jamais utilisé pendant une exécution. Toujours 0 pour interroger une table optimisée en mémoire.s’applique à: SQL Server 2016 (13.x) et versions ultérieures. |
total_grant_kb |
bigint | Quantité totale d’allocation de mémoire réservée dans la base de connaissances reçue par ce plan depuis sa compilation. Toujours 0 pour interroger une table optimisée en mémoire.s’applique à: SQL Server 2016 (13.x) et versions ultérieures. |
last_grant_kb |
bigint | Quantité d’allocation de mémoire réservée en Ko lorsque ce plan a été exécuté la dernière fois. Toujours 0 pour interroger une table optimisée en mémoire.s’applique à: SQL Server 2016 (13.x) et versions ultérieures. |
min_grant_kb |
bigint | Quantité minimale d’allocation de mémoire réservée en Ko que ce plan n’a jamais reçu lors d’une exécution. Toujours 0 pour interroger une table optimisée en mémoire.s’applique à: SQL Server 2016 (13.x) et versions ultérieures. |
max_grant_kb |
bigint | Quantité maximale d’allocation de mémoire réservée en Ko que ce plan a jamais reçu lors d’une exécution. Toujours 0 pour interroger une table optimisée en mémoire.s’applique à: SQL Server 2016 (13.x) et versions ultérieures. |
total_used_grant_kb |
bigint | Quantité totale d’allocation de mémoire réservée dans la base de connaissances utilisée dans ce plan depuis sa compilation. Toujours 0 pour interroger une table optimisée en mémoire.s’applique à: SQL Server 2016 (13.x) et versions ultérieures. |
last_used_grant_kb |
bigint | Quantité d’allocation de mémoire utilisée en Ko lorsque ce plan a exécuté la dernière fois. Toujours 0 pour interroger une table optimisée en mémoire.s’applique à: SQL Server 2016 (13.x) et versions ultérieures. |
min_used_grant_kb |
bigint | Quantité minimale d’allocation de mémoire utilisée en Ko que ce plan n’a jamais utilisé pendant une exécution. Toujours 0 pour interroger une table optimisée en mémoire.s’applique à: SQL Server 2016 (13.x) et versions ultérieures. |
max_used_grant_kb |
bigint | Quantité maximale d’allocation de mémoire utilisée en Ko que ce plan n’a jamais utilisé pendant une exécution. Toujours 0 pour interroger une table optimisée en mémoire.s’applique à: SQL Server 2016 (13.x) et versions ultérieures. |
total_ideal_grant_kb |
bigint | Quantité totale d’allocation de mémoire idéale dans la base de connaissances estimée dans ce plan, car elle a été compilée. Toujours 0 pour interroger une table optimisée en mémoire.s’applique à: SQL Server 2016 (13.x) et versions ultérieures. |
last_ideal_grant_kb |
bigint | Quantité d’allocation de mémoire idéale en Ko lorsque ce plan a été exécuté la dernière fois. Toujours 0 pour interroger une table optimisée en mémoire.s’applique à: SQL Server 2016 (13.x) et versions ultérieures. |
min_ideal_grant_kb |
bigint | Quantité minimale d’allocation de mémoire idéale en Ko que ce plan a jamais estimé pendant une exécution. Toujours 0 pour interroger une table optimisée en mémoire.s’applique à: SQL Server 2016 (13.x) et versions ultérieures. |
max_ideal_grant_kb |
bigint | Quantité maximale d’allocation de mémoire idéale en Ko que ce plan a jamais estimé pendant une exécution. Toujours 0 pour interroger une table optimisée en mémoire.s’applique à: SQL Server 2016 (13.x) et versions ultérieures. |
total_reserved_threads |
bigint | Somme totale des threads parallèles réservés que ce plan n’a jamais utilisé depuis sa compilation. Toujours 0 pour interroger une table optimisée en mémoire.s’applique à: SQL Server 2016 (13.x) et versions ultérieures. |
last_reserved_threads |
bigint | Nombre de threads parallèles réservés lorsque ce plan a exécuté la dernière fois. Toujours 0 pour interroger une table optimisée en mémoire.s’applique à: SQL Server 2016 (13.x) et versions ultérieures. |
min_reserved_threads |
bigint | Nombre minimal de threads parallèles réservés que ce plan n’a jamais utilisé pendant une exécution. Toujours 0 pour interroger une table optimisée en mémoire.s’applique à: SQL Server 2016 (13.x) et versions ultérieures. |
max_reserved_threads |
bigint | Nombre maximal de threads parallèles réservés que ce plan n’a jamais utilisé pendant une exécution. Toujours 0 pour interroger une table optimisée en mémoire.s’applique à: SQL Server 2016 (13.x) et versions ultérieures. |
total_used_threads |
bigint | Somme totale des threads parallèles utilisés que ce plan n’a jamais utilisé depuis sa compilation. Toujours 0 pour interroger une table optimisée en mémoire.s’applique à: SQL Server 2016 (13.x) et versions ultérieures. |
last_used_threads |
bigint | Nombre de threads parallèles utilisés lorsque ce plan a exécuté la dernière fois. Toujours 0 pour interroger une table optimisée en mémoire.s’applique à: SQL Server 2016 (13.x) et versions ultérieures. |
min_used_threads |
bigint | Nombre minimal de threads parallèles utilisés que ce plan n’a jamais utilisé pendant une exécution. Toujours 0 pour interroger une table optimisée en mémoire.s’applique à: SQL Server 2016 (13.x) et versions ultérieures. |
max_used_threads |
bigint | Nombre maximal de threads parallèles utilisés que ce plan n’a jamais utilisé pendant une exécution. Toujours 0 pour interroger une table optimisée en mémoire.s’applique à: SQL Server 2016 (13.x) et versions ultérieures. |
total_columnstore_segment_reads |
bigint | Somme totale des segments columnstore lus par la requête. Ne peut pas être null. S’applique à : à partir de SQL Server 2016 (13.x) SP2 et SQL Server 2017 (14.x) CU3 |
last_columnstore_segment_reads |
bigint | Nombre de segments columnstore lus par la dernière exécution de la requête. Ne peut pas être null. S’applique à : à partir de SQL Server 2016 (13.x) SP2 et SQL Server 2017 (14.x) CU3 |
min_columnstore_segment_reads |
bigint | Nombre minimal de segments columnstore jamais lus par la requête pendant une exécution. Ne peut pas être null. S’applique à : à partir de SQL Server 2016 (13.x) SP2 et SQL Server 2017 (14.x) CU3 |
max_columnstore_segment_reads |
bigint | Nombre maximal de segments columnstore jamais lus par la requête pendant une exécution. Ne peut pas être null. S’applique à : à partir de SQL Server 2016 (13.x) SP2 et SQL Server 2017 (14.x) CU3 |
total_columnstore_segment_skips |
bigint | Somme totale des segments columnstore ignorés par la requête. Ne peut pas être null. S’applique à : à partir de SQL Server 2016 (13.x) SP2 et SQL Server 2017 (14.x) CU3 |
last_columnstore_segment_skips |
bigint | Nombre de segments columnstore ignorés par la dernière exécution de la requête. Ne peut pas être null. S’applique à : à partir de SQL Server 2016 (13.x) SP2 et SQL Server 2017 (14.x) CU3 |
min_columnstore_segment_skips |
bigint | Nombre minimal de segments columnstore jamais ignorés par la requête pendant une exécution. Ne peut pas être null. S’applique à : à partir de SQL Server 2016 (13.x) SP2 et SQL Server 2017 (14.x) CU3 |
max_columnstore_segment_skips |
bigint | Nombre maximal de segments columnstore jamais ignorés par la requête pendant une exécution. Ne peut pas être null. S’applique à : à partir de SQL Server 2016 (13.x) SP2 et SQL Server 2017 (14.x) CU3 |
total_spills |
bigint | Nombre total de pages débordées par l’exécution de cette requête depuis sa compilation. S’applique à : à partir de SQL Server 2016 (13.x) SP2 et SQL Server 2017 (14.x) CU3 |
last_spills |
bigint | Le nombre de pages a déversé la dernière fois que la requête a été exécutée. S’applique à : à partir de SQL Server 2016 (13.x) SP2 et SQL Server 2017 (14.x) CU3 |
min_spills |
bigint | Nombre minimal de pages que cette requête a jamais déversées pendant une seule exécution. S’applique à : à partir de SQL Server 2016 (13.x) SP2 et SQL Server 2017 (14.x) CU3 |
max_spills |
bigint | Nombre maximal de pages que cette requête a jamais déversées pendant une seule exécution. S’applique à : à partir de SQL Server 2016 (13.x) SP2 et SQL Server 2017 (14.x) CU3 |
pdw_node_id |
int | Identificateur du nœud sur lequel cette distribution est activée. S’applique à : Azure Synapse Analytics, Analytics Platform System (PDW) |
total_page_server_reads |
bigint | Nombre total de lectures de serveur de pages distantes effectuées par les exécutions de ce plan depuis sa compilation. S’applique à : Azure SQL Database Hyperscale |
last_page_server_reads |
bigint | Nombre de lectures de serveur de pages distantes effectuées la dernière fois que le plan a été exécuté. S’applique à : Azure SQL Database Hyperscale |
min_page_server_reads |
bigint | Le nombre minimal de serveurs de pages distantes lit que ce plan n’a jamais effectué pendant une seule exécution. S’applique à : Azure SQL Database Hyperscale |
max_page_server_reads |
bigint | Nombre maximal de lectures de serveur de pages distantes que ce plan a jamais effectuées pendant une seule exécution. S’applique à : Azure SQL Database Hyperscale |
Remarque
1 Pour les procédures stockées compilées en mode natif lorsque la collecte de statistiques est activée, le temps de travail est collecté en millisecondes. Si la requête s’exécute en moins d’une milliseconde, la valeur est 0
.
autorisations
SQL Server 2019 (15.x) et versions antérieures et Azure SQL Managed Instance nécessitent une autorisation VIEW SERVER STATE
.
SQL Server 2022 (16.x) et versions ultérieures nécessitent VIEW SERVER PERFORMANCE STATE
autorisation sur le serveur.
Sur Azure SQL Database VIEW DATABASE STATE
sur la base de données ou l’appartenance au rôle serveur ##MS_ServerStateReader##
est requise.
Notes
Les statistiques de la vue sont actualisées lorsqu'une requête est terminée.
Exemples
R. Rechercher les requêtes TOP N
L’exemple suivant renvoie des informations relatives aux cinq premières requêtes, classées sur la base du 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. La colonne Sample_Statement_Text montre un exemple de structure de requête qui correspond au hachage de requête, mais il doit être lu sans tenir compte des valeurs spécifiques de l’instruction. Par exemple, si une instruction contient WHERE Id = 5
, vous pouvez la lire sous sa forme plus générique : WHERE Id = @some_value
.
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 Sample_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. Retourner des agrégats de nombre de lignes pour une requête
L’exemple suivant retourne les informations d’agrégation du nombre de lignes (nombre total de lignes, lignes minimales, lignes maximales 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;