Partager via


sys.dm_exec_query_profiles (Transact-SQL)

S’applique à : SQL Server Azure SQL Database Azure SQL Managed Instance

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.

Table retournée

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 celles qui créent uniquement la sortie lorsque la requête est terminée.

Nom de la colonne Type de données Description
session_id smallint Identifie la session dans laquelle cette requête s'exécute. Référence dm_exec_sessions.session_id.
request_id int Identifie la demande cible. Référence dm_exec_sessions.request_id.
sql_handle varbinary(64) Jeton identifiant de manière unique le traitement ou la procédure stockée dont fait partie la requête. Référence dm_exec_query_stats.sql_handle.
plan_handle varbinary(64) Est un jeton qui identifie de façon univoque un plan d'exécution de requête pour un lot exécuté ; ce plan réside dans la mémoire cache des plans ou est en cours d’exécution. Références dm_exec_query_stats.plan_handle.
physical_operator_name nvarchar (256) Nom de l'opérateur physique.
node_id int Identifie un nœud d'opérateur dans l'arborescence de requête.
thread_id int Fait 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_address varbinary(8) Identifie la tâche SQLOS utilisée par ce thread. Référence dm_os_tasks.task_address.
row_count bigint Nombre de lignes retournées par l'opérateur jusqu'à présent.
rewind_count bigint Nombre de rembobinages jusqu'à présent.
rebind_count bigint Nombre de reliaisons jusqu'à présent.
end_of_scan_count bigint Nombre de fins d'analyses jusqu'à présent.
estimate_row_count bigint Nombre de lignes estimé. Il peut être utile pour comparer estimated_row_count à actual row_count réel.
first_active_time bigint Heure du premier appel de l'opérateur en millisecondes.
last_active_time bigint Heure du dernier appel de l'opérateur en millisecondes.
open_time bigint Horodatage lors de l'ouverture (en millisecondes).
first_row_time bigint Horodatage lors de l'ouverture de la première ligne (en millisecondes).
last_row_time bigint Horodatage lors de l'ouverture de la dernière ligne (en millisecondes).
close_time bigint Horodatage lors de la fermeture (en millisecondes).
elapsed_time_ms bigint Temps écoulé total (en millisecondes) utilisé par les opérations du nœud cible jusqu’à présent.
cpu_time_ms bigint Temps processeur total (en millisecondes) utilisé par les opérations du nœud cible jusqu’à présent.
database_id smallint ID de la base de données qui contient l'objet sur lequel les opérations de lecture et d'écriture sont effectuées.
object_id int Identificateur de l'objet sur lequel les opérations de lecture et écriture sont effectuées. Fait référence à sys.objects.object_id.
index_id int Index (le cas échéant) dans lequel l'ensemble de lignes est ouvert.
scan_count bigint Nombre d'analyses de tables ou d'index jusqu'à présent.
logical_read_count bigint Nombre de lectures logiques jusqu'à présent.
physical_read_count bigint Nombre de lectures physiques jusqu'à présent.
read_ahead_count bigint Nombre de lectures anticipées jusqu'à présent.
write_page_count bigint Nombre d'écritures de page jusqu'à présent en raison de débordement.
lob_logical_read_count bigint Nombre de lectures logiques LOB jusqu'à présent.
lob_physical_read_count bigint Nombre de lectures physiques LOB jusqu'à présent.
lob_read_ahead_count bigint Nombre de lectures anticipées LOB jusqu'à présent.
segment_read_count int Nombre de lectures anticipées de segment jusqu'à présent.
segment_skip_count int Nombre de segments ignorés jusqu'à présent.
actual_read_row_count bigint Nombre de lignes lues par un opérateur avant l’application du prédicat résiduel.
estimated_read_row_count bigint S’applique à : à partir de SQL Server 2016 (13.x) SP1.
Nombre de lignes estimées à lire par un opérateur avant l’application du prédicat résiduel.

Remarques d'ordre général

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

Les compteurs liés aux E/S signalés par cette DMV sont plus granulaires que ceux signalés par SET STATISTICS IO les deux manières suivantes :

  • SET STATISTICS IO regroupe les compteurs pour toutes les E/S dans une table donnée. Avec cette DMV, vous obtiendrez des compteurs distincts 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 de SQL Server 2016 (13.x) SP1, l’infrastructure de profilage des statistiques d’exécution des requêtes standard existe côte à côte avec une infrastructure de profilage des statistiques d’exécution de requêtes légère. SET STATISTICS XML ONet SET STATISTICS PROFILE ON utilisez toujours l’infrastructure de profilage des statistiques d’exécution de requête standard. Pour sys.dm_exec_query_profiles qu’elles soient remplies, l’une des infrastructures de profilage des requêtes doit être activée. Pour plus d’informations, consultez Infrastructure du profilage de requête.

Remarque

La requête en cours d’examen doit démarrer une fois l’infrastructure de profilage de requête activée, l’activation après le démarrage de la requête ne produit pas de résultats sys.dm_exec_query_profiles. Pour plus d’informations sur l’activation des infrastructures de profilage des requêtes, consultez Infrastructure de profilage des requêtes.

autorisations

  • Sur SQL Server et Azure SQL Managed Instance, nécessite VIEW DATABASE STATE l’autorisation et l’appartenance au db_owner rôle de base de données.
  • Sur les niveaux Premium Azure SQL Database, nécessite l’autorisation VIEW DATABASE STATE dans la base de données.
  • Sur les objectifs de service Azure SQL Database Basic, S0 et S1, et pour les bases de données dans des pools élastiques, le compte d’administrateur du serveur ou le compte d’administrateur Microsoft Entra est requis. Sur tous les autres objectifs de service SQL Database, l’autorisation VIEW DATABASE STATE est requise dans la base de données.

Autorisations pour SQL Server 2022 (et versions plus récentes)

Requiert l'autorisation VIEW DATABASE PERFORMANCE STATE sur la base de données.

Exemples

Étape 1 : Connectez-vous à une session dans laquelle vous prévoyez d’exécuter la requête avec sys.dm_exec_query_profileslaquelle vous allez analyser . Pour configurer la requête pour l’utilisation SET STATISTICS PROFILE ONdu profilage . 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 (not needed in SQL Server 2019)  
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 : Connectez-vous à 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;  

Voir aussi

Fonctions et vues de gestion dynamique (Transact-SQL)
Fonctions et vues de gestion dynamique relatives à l'exécution (Transact-SQL)