sys.dm_exec_query_profiles (Transact-SQL)

 

CETTE RUBRIQUE S’APPLIQUE À :ouiSQL Server (à partir de la version 2014)ouiAzure SQL DatabasenonAzure SQL Data WarehousenonParallel Data Warehouse

Contrôle la progression en temps réel lorsqu'une requête est en cours d'exécution. Par exemple, utilisez cette vue de gestion dynamique pour déterminer la partie de la requête qui est lente. Joignez cette vue de gestion dynamique à d'autres vues de gestion dynamique système identifiées dans le champ de description. Ou bien, joignez cette vue de gestion dynamique à d'autres compteurs de performances (tels que l'analyseur de performances, xperf) à l'aide de colonnes timestamp.

Les compteurs retournés sont par opérateur par thread. Les résultats sont dynamiques et ne correspondent pas aux résultats des options existantes telles que SET STATISTICS XML ON qui crée uniquement une sortie quand la requête est terminée.

Nom de colonneType de donnéesDescription
session_idsmallintIdentifie la session dans laquelle cette requête s'exécute. Référence dm_exec_sessions.session_id.
request_idintIdentifie la demande cible. Référence dm_exec_sessions.request_id.
sql_handlevarbinary(64)Identifie la requête cible. Référence dm_exec_query_stats.sql_handle.
plan_handlevarbinary(64)Identifie la requête cible (références dm_exec_query_stats.plan_handle).
physical_operator_namenvarchar (256)Nom de l'opérateur physique.
node_idintIdentifie un nœud d'opérateur dans l'arborescence de requête.
thread_idintFait la distinction entre les threads (pour une requête parallèle) qui appartiennent au même nœud d'opérateur de requête.
task_addressvarbinary (8)Identifie la tâche SQLOS utilisée par ce thread. Référence dm_os_tasks.task_address.
row_countbigintNombre de lignes retournées par l'opérateur jusqu'à présent.
rewind_countbigintNombre de rembobinages jusqu'à présent.
rebind_countbigintNombre de reliaisons jusqu'à présent.
end_of_scan_countbigintNombre de fins d'analyses jusqu'à présent.
estimate_row_countbigintNombre de lignes estimé. Il peut être utile pour comparer estimated_row_count à actual row_count réel.
first_active_timebigintHeure du premier appel de l'opérateur en millisecondes.
last_active_timebigintHeure du dernier appel de l'opérateur en millisecondes.
open_timebigintHorodatage lors de l'ouverture (en millisecondes).
first_row_timebigintHorodatage lors de l'ouverture de la première ligne (en millisecondes).
last_row_timebigintHorodatage lors de l'ouverture de la dernière ligne (en millisecondes).
close_timebigintHorodatage lors de la fermeture (en millisecondes).
elapsed_time_msbigintTemps total écoulé (en millisecondes) utilisé par les opérations du nœud cible jusqu'à présent.
cpu_time_msbigintTemps processeur total écoulé (en millisecondes) utilisé par les opérations du nœud cible jusqu'à présent.
database_idsmallintID de la base de données qui contient l'objet sur lequel les opérations de lecture et d'écriture sont effectuées.
object_idintIdentificateur de l'objet sur lequel les opérations de lecture et écriture sont effectuées. Fait référence à sys.objects.object_id.
index_idintIndex (le cas échéant) dans lequel l'ensemble de lignes est ouvert.
scan_countbigintNombre d'analyses de tables ou d'index jusqu'à présent.
logical_read_countbigintNombre de lectures logiques jusqu'à présent.
physical_read_countbigintNombre de lectures physiques jusqu'à présent.
read_ahead_countbigintNombre de lectures anticipées jusqu'à présent.
write_page_countbigintNombre d'écritures de page jusqu'à présent en raison de débordement.
lob_logical_read_countbigintNombre de lectures logiques LOB jusqu'à présent.
lob_physical_read_countbigintNombre de lectures physiques LOB jusqu'à présent.
lob_read_ahead_countbigintNombre de lectures anticipées LOB jusqu'à présent.
segment_read_countintNombre de lectures anticipées de segment jusqu'à présent.
segment_skip_countintNombre de segments ignorés jusqu'à présent.
actual_read_row_countbigintNombre de lignes lues par un opérateur avant le prédicat résiduel a été appliqué.
estimated_read_row_countbigintS’applique à : compter SQL Server 2016 SP1.
Nombre de lignes estimé être lue par un opérateur avant le prédicat résiduel a été appliqué.

Si le nœud du plan de requête n'a pas d'E/S, tous les compteurs d'E/S sont définis sur NULL.

Les compteurs d'E/S indiqués par cette vue de gestion dynamique sont plus précis que ceux signalés par SET STATISTICS IO, notamment :

  • SET STATISTICS IO regroupe les compteurs pour toutes les E/S dans une table donnée. Avec cette vue de gestion dynamique, vous obtenez des compteurs séparés pour chaque nœud du plan de requête qui effectue des E/S dans la table.

  • En cas d'analyse parallèle, cette vue de gestion dynamique indique des compteurs pour chaque threads parallèles de l'analyse.

Compter SQL Server 2016 SP1, les statistiques d’exécution de requête hérité infrastructure de profilage existe côte à côte avec une infrastructure de profilage des statistiques d’exécution léger de requête. La nouvelle requête d’exécution statistiques profilage infrastructure réduit considérablement la surcharge des performances de la collecte de statistiques d’exécution requête par opérateur, comme le nombre réel de lignes. Cette fonctionnalité peut être activée à l’aide de global démarrage indicateur de trace 7412, ou est activée automatiquement lorsque des événements étendus query_thread_profile est utilisé.

System_CAPS_ICON_note.jpg Remarque

Processeur et le temps écoulé ne sont pas pris en charge dans l’infrastructure de profilage de statistiques d’exécution de requêtes simplifié afin de réduire l’impact sur les performances.

SET STATISTICS XML ON et SET STATISTICS PROFILE ON toujours utiliser les statistiques d’exécution de requête hérité infrastructure de profilage.

Sur SQL Server nécessite l’autorisation VIEW SERVER STATE sur le serveur.

Sur Base de données SQL niveaux Premium requiert l’autorisation VIEW DATABASE STATE dans la base de données. Sur Base de données SQL base niveaux Standard et nécessitent le Base de données SQL compte d’administrateur.

Étape 1 : Connexion à une session dans laquelle vous envisagez d’exécuter la requête vous analyserez avec sys.dm_exec_query_profiles. Pour configurer la requête pour le profilage Utilisez SET STATISTICS PROFILE sur. Exécutez votre requête dans la même session.

--Configure query for profiling with sys.dm_exec_query_profiles  
SET STATISTICS PROFILE ON;  
GO  

--Or enable query profiling globally under SQL Server 2016 SP1 or above  
DBCC TRACEON (7412, -1);  
GO 
  
--Next, run your query in this session, or in any other session if query profiling has been enabled globally 

Étape 2 : Connexion à une deuxième session différente de la session dans laquelle votre requête est en cours d’exécution.

L'instruction suivante résume l'avancement de la requête en cours d'exécution dans la session 54. Pour ce faire, elle calcule le nombre total de lignes de sortie de tous les threads pour chaque nœud, et compare ce nombre au nombre estimé de lignes de sortie pour ce nœud.

--Run this in a different session than the session in which your query is running. 
--Note that you may need to change session id 54 below with the session id you want to monitor.
SELECT node_id,physical_operator_name, SUM(row_count) row_count, 
  SUM(estimate_row_count) AS estimate_row_count, 
  CAST(SUM(row_count)*100 AS float)/SUM(estimate_row_count)  
FROM sys.dm_exec_query_profiles   
WHERE session_id=54
GROUP BY node_id,physical_operator_name  
ORDER BY node_id;  

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

Ajouts de la communauté

AJOUTER
Afficher: