sys.dm_exec_query_stats (Transact-SQL)

 

CETTE RUBRIQUE S’APPLIQUE À : ouiSQL Server (à partir de la version 2008)ouiAzure SQL DatabaseouiAzure SQL Data WarehouseouiParallel Data Warehouse

Retourne les statistiques sur les performances des agrégats 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.

Remarque une requête initiale de sys.dm_exec_query_stats peut entraîner des résultats incorrects s’il existe une charge de travail en cours d’exécution sur le serveur. Des résultats plus précis peuvent être déterminés en réexécutant la requête.

AUTRE REMARQUE Appeler à partir de Azure SQL Data Warehouse ou Parallel Data Warehouse, utilisez le nom sys.dm_pdw_nodes_exec_query_stats.

Nom de colonneType de donnéesDescription
sql_handlevarbinary(64)Jeton qui fait référence au traitement ou à la procédure stockée dont fait partie la requête.

 sql_handleavec statement_start_offset et statement_end_offset, peut être utilisé pour récupérer le texte SQL de la requête en appelant le sys.dm_exec_sql_text fonction de gestion dynamique.
statement_start_offsetintIndique, 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_offsetintIndique, 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, la valeur -1 indique la fin du lot. Les commentaires de fin sont n’incluent plus.
plan_generation_numbigintNuméro de séquence permettant de distinguer les instances de plans après une recompilation.
plan_handlevarbinary(64)Jeton qui fait référence au plan compilé dont fait partie la requête. Cette valeur peut être passée à la sys.dm_exec_query_plan fonction de gestion dynamique pour obtenir le plan de requête.

Sa valeur est toujours 0x000 lorsqu'une procédure stockée compilée en mode natif interroge une table optimisée en mémoire.
creation_timedate/heureHeure de compilation du plan.
last_execution_timedate/heureHeure de début de la dernière exécution du plan.
execution_countbigintNombre d'exécutions du plan depuis sa dernière compilation.
total_worker_timebigintTemps 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 être inexact si plusieurs exécutions sont réalisées en moins d’une milliseconde.
last_worker_timebigintTemps processeur, indiqué en microsecondes (mais précis uniquement en millisecondes), utilisé lors de la dernière exécution du plan. 1
min_worker_timebigintTemps processeur minimum, indiqué en microsecondes (mais précis uniquement en millisecondes), jamais utilisé par ce plan en une seule exécution. 1
max_worker_timebigintTemps processeur maximum, indiqué en microsecondes (mais précis uniquement en millisecondes), jamais utilisé par ce plan en une seule exécution. 1
total_physical_readsbigintNombre total de lectures physiques effectuées par les exécutions de ce plan depuis sa compilation.

Sa valeur est toujours 0 lors de l'interrogation d'une table optimisée en mémoire.
last_physical_readsbigintNombre de lectures physiques effectuées lors de la dernière exécution du plan.

Sa valeur est toujours 0 lors de l'interrogation d'une table optimisée en mémoire.
min_physical_readsbigintNombre minimal de lectures physiques effectuées par ce plan lors d'une seule exécution.

Sa valeur est toujours 0 lors de l'interrogation d'une table optimisée en mémoire.
max_physical_readsbigintNombre maximal de lectures physiques effectuées par ce plan lors d'une seule exécution.

Sa valeur est toujours 0 lors de l'interrogation d'une table optimisée en mémoire.
total_logical_writesbigintNombre total d'écritures logiques effectuées par les exécutions de ce plan depuis sa compilation.

Sa valeur est toujours 0 lors de l'interrogation d'une table optimisée en mémoire.
last_logical_writesbigintNumé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.

Sa valeur est toujours 0 lors de l'interrogation d'une table optimisée en mémoire.
min_logical_writesbigintNombre minimal d'écritures logiques effectuées par ce plan lors d'une seule exécution.

Sa valeur est toujours 0 lors de l'interrogation d'une table optimisée en mémoire.
max_logical_writesbigintNombre maximal d'écritures logiques effectuées par ce plan lors d'une seule exécution.

Sa valeur est toujours 0 lors de l'interrogation d'une table optimisée en mémoire.
total_logical_readsbigintNombre total de lectures logiques effectuées par les exécutions de ce plan depuis sa compilation.

Sa valeur est toujours 0 lors de l'interrogation d'une table optimisée en mémoire.
last_logical_readsbigintNombre de lectures logiques effectuées lors de la dernière exécution du plan.

Sa valeur est toujours 0 lors de l'interrogation d'une table optimisée en mémoire.
min_logical_readsbigintNombre minimal de lectures logiques effectuées par ce plan lors d'une seule exécution.

Sa valeur est toujours 0 lors de l'interrogation d'une table optimisée en mémoire.
max_logical_readsbigintNombre maximal de lectures logiques effectuées par ce plan lors d'une seule exécution.

Sa valeur est toujours 0 lors de l'interrogation d'une table optimisée en mémoire.
total_clr_timebigintTemps, indiqué en microsecondes (mais précis uniquement en millisecondes), utilisé dans Microsoft .NET Framework objets de common language runtime (CLR) 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_timebigintTemps, indiqué en microsecondes (mais précis uniquement en millisecondes) utilisé par l’exécution dans .NET Framework objets CLR lors de 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_timebigintTemps 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_timebigintTemps 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_timebigintTemps total écoulé, indiqué en microsecondes (mais précis uniquement en millisecondes), pour les exécutions de ce plan.
last_elapsed_timebigintTemps écoulé, indiqué en microsecondes (mais précis uniquement en millisecondes), pour la dernière exécution de ce plan.
min_elapsed_timebigintTemps minimum écoulé, indiqué en microsecondes (mais précis uniquement en millisecondes), pour les différentes exécutions de ce plan.
max_elapsed_timebigintTemps maximum écoulé, indiqué en microsecondes (mais précis uniquement en millisecondes), pour les différentes exécutions de ce plan.
query_hashBinary (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_hashbinary (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.

Sa valeur est toujours 0x000 lorsqu'une procédure stockée compilée en mode natif interroge une table optimisée en mémoire.
total_rowsbigintNombre total de lignes renvoyées par la requête. Ne peut pas être NULL.

Sa valeur est toujours 0 lorsqu'une procédure stockée compilée en mode natif interroge une table optimisée en mémoire.
last_rowsbigintNombre de lignes renvoyées par la dernière exécution de la requête. Ne peut pas avoir la valeur null.

Sa valeur est toujours 0 lorsqu'une procédure stockée compilée en mode natif interroge une table optimisée en mémoire.
min_rowsbigintNombre 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 avoir la valeur null.

Sa valeur est toujours 0 lorsqu'une procédure stockée compilée en mode natif interroge une table optimisée en mémoire.
max_rowsbigintNombre 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 avoir la valeur null.

Sa valeur est toujours 0 lorsqu'une procédure stockée compilée en mode natif interroge une table optimisée en mémoire.
statement_sql_handlevarbinary(64)S'applique à: SQL Server 2014 et SQL Server 2016.

Réservé pour un usage ultérieur.
statement_context_idbigintS'applique à: SQL Server 2014 et SQL Server 2016.

Réservé pour un usage ultérieur.
total_dopbigintLa somme totale de degré de parallélisme ce plan utilisé dans la mesure où il a été compilé. Il sera toujours 0 pour interroger une table optimisée en mémoire.

 S'applique à: SQL Server 2016 et SQL Server 2016.
last_dopbigintLe degré de parallélisme lors de la dernière exécution de ce plan. Il sera toujours 0 pour interroger une table optimisée en mémoire.

 S'applique à: SQL Server 2016 et SQL Server 2016.
min_dopbigintLe degré de parallélisme minimal ce plan déjà utilisé pendant une exécution. Il sera toujours 0 pour interroger une table optimisée en mémoire.

 S'applique à: SQL Server 2016 et SQL Server 2016.
MAX_DOPbigintLe degré maximal de parallélisme ce plan déjà utilisé pendant une exécution. Il sera toujours 0 pour interroger une table optimisée en mémoire.

 S'applique à: SQL Server 2016 et SQL Server 2016.
total_grant_kbbigintLa quantité totale de mémoire réservée accorder en Ko ce plan reçu depuis sa compilation. Il sera toujours 0 pour interroger une table optimisée en mémoire.

 S'applique à: SQL Server 2016 et SQL Server 2016.
last_grant_kbbigintLa quantité de mémoire réservée accorder dans la base de connaissances lors de la dernière exécution de ce plan. Il sera toujours 0 pour interroger une table optimisée en mémoire.

 S'applique à: SQL Server 2016 et SQL Server 2016.
min_grant_kbbigintLa quantité minimale de mémoire réservée accorder en Ko ce plan jamais reçu au cours d’une exécution. Il sera toujours 0 pour interroger une table optimisée en mémoire.

 S'applique à: SQL Server 2016 et SQL Server 2016.
max_grant_kbbigintLa quantité maximale de mémoire réservée accorder en Ko ce plan jamais reçu au cours d’une exécution. Il sera toujours 0 pour interroger une table optimisée en mémoire.

 S'applique à: SQL Server 2016 et SQL Server 2016.
total_used_grant_kbbigintLa quantité totale de mémoire réservée accorder, en Ko, ce plan utilisé, car il a été compilé. Il sera toujours 0 pour interroger une table optimisée en mémoire.

 S'applique à: SQL Server 2016 et SQL Server 2016.
last_used_grant_kbbigintLa quantité d’allocation de mémoire utilisée, en Ko lors de la dernière exécution de ce plan. Il sera toujours 0 pour interroger une table optimisée en mémoire.

 S'applique à: SQL Server 2016 et SQL Server 2016.
min_used_grant_kbbigintLa quantité minimale de mémoire utilisée accorder en Ko ce plan déjà utilisé pendant une exécution. Il sera toujours 0 pour interroger une table optimisée en mémoire.

 S'applique à: SQL Server 2016 et SQL Server 2016.
max_used_grant_kbbigintLa quantité maximale de mémoire utilisée accorder en Ko ce plan déjà utilisé pendant une exécution. Il sera toujours 0 pour interroger une table optimisée en mémoire.

 S'applique à: SQL Server 2016 et SQL Server 2016.
total_ideal_grant_kbbigintAllocation de la quantité totale de mémoire idéale en Ko ce plan utilisé, car il a été compilé. Il sera toujours 0 pour interroger une table optimisée en mémoire.

 S'applique à: SQL Server 2016 et SQL Server 2016.
last_ideal_grant_kbbigintLa quantité de mémoire idéale accorder dans la base de connaissances lors de la dernière exécution de ce plan. Il sera toujours 0 pour interroger une table optimisée en mémoire.

 S'applique à: SQL Server 2016 et SQL Server 2016.
min_ideal_grant_kbbigintLa quantité minimale de mémoire idéale accorder en Ko ce plan déjà utilisé pendant une exécution. Il sera toujours 0 pour interroger une table optimisée en mémoire.

 S'applique à: SQL Server 2016 et SQL Server 2016.
max_ideal_grant_kbbigintLa quantité maximale de mémoire idéale accorder en Ko ce plan déjà utilisé pendant une exécution. Il sera toujours 0 pour interroger une table optimisée en mémoire.

 S'applique à: SQL Server 2016 et SQL Server 2016.
total_reserved_threadsbigintLa somme totale des réservé parallèle de threads de ce plan déjà utilisé dans la mesure où il a été compilé. Il sera toujours 0 pour interroger une table optimisée en mémoire.

 S'applique à: SQL Server 2016 et SQL Server 2016.
last_reserved_threadsbigintLe nombre de threads en parallèle réservés lors de la dernière exécution de ce plan. Il sera toujours 0 pour interroger une table optimisée en mémoire.

 S'applique à: SQL Server 2016 et SQL Server 2016.
min_reserved_threadsbigintLe nombre minimal de réservé parallèle de threads de ce plan déjà utilisé pendant une exécution. Il sera toujours 0 pour interroger une table optimisée en mémoire.

 S'applique à: SQL Server 2016 et SQL Server 2016.
max_reserved_threadsbigintLe nombre maximal de parallèle réservé threads ce plan déjà utilisé pendant une exécution. Il sera toujours 0 pour interroger une table optimisée en mémoire.

 S'applique à: SQL Server 2016 et SQL Server 2016.
total_used_threadsbigintLa somme totale des utilisé threads parallèles à ce plan déjà utilisé dans la mesure où il a été compilé. Il sera toujours 0 pour interroger une table optimisée en mémoire.

 S'applique à: SQL Server 2016 et SQL Server 2016.
last_used_threadsbigintLe nombre de threads en parallèle utilisés lors de la dernière exécution de ce plan. Il sera toujours 0 pour interroger une table optimisée en mémoire.

 S'applique à: SQL Server 2016 et SQL Server 2016.
min_used_threadsbigintLe nombre minimal de threads parallèles utilisés ce plan est déjà utilisé pendant une exécution. Il sera toujours 0 pour interroger une table optimisée en mémoire.

 S'applique à: SQL Server 2016 et SQL Server 2016.
max_used_threadsbigintLe nombre maximal de threads parallèles utilisés ce plan est déjà utilisé pendant une exécution. Il sera toujours 0 pour interroger une table optimisée en mémoire.

 S'applique à: SQL Server 2016 et SQL Server 2016.
« pdw_node_id »intS’applique aux: Azure SQL Data Warehouse,Parallel Data Warehouse

L’identificateur pour le nœud de cette distribution.

1 des procédures stockées compilées en mode natif lors de la collecte de statistiques est activé, des temps de travail est collecté en millisecondes. Si la requête s'exécute en moins d'une milliseconde, la valeur est 0.

Nécessite l'autorisation VIEW SERVER STATE sur le serveur.

Les statistiques de la vue sont actualisées lorsqu'une requête est terminée.

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;  
  

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;  

Vues de gestion dynamique et fonctions (Transact-SQL)
Fonctions (Transact-SQL) et les vues de gestion dynamique liées à l’exécution
Sys.dm_exec_sql_text (Transact-SQL)
Sys.dm_exec_query_plan (Transact-SQL)

Ajouts de la communauté

AJOUTER
Afficher: