Partager via


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 de base, S0et objectifs de service S1, et pour les bases de données dans pools élastiques, le compte administrateur de serveur , le compte Microsoft Entra admin ou l’appartenance au rôle serveur est nécessaire. Sur tous les autres objectifs de service SQL Database, l’autorisation 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;