Note
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier les répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de changer de répertoire.
S’applique à : SQL Server 2016 (13.x) et versions
ultérieures Azure SQL SQL Managed
Instance
SQL database in Microsoft Fabric
Renvoie le plan d’exécution de la requête pour les demandes en cours. Utilisez cette vue DMV pour récupérer showplan XML avec des statistiques temporaires.
Syntaxe
sys.dm_exec_query_statistics_xml(session_id)
Arguments
session_id
ID de session exécutant le lot à rechercher. session_id est de type smallint. session_id peut être obtenu à partir des objets de gestion dynamique suivants :
Table retournée
| Nom de la colonne | Type de données | Description |
|---|---|---|
session_id |
smallint | ID de la session. N'accepte pas la valeur NULL. |
request_id |
int | ID de la demande. N'accepte pas la valeur NULL. |
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. Autorise la valeur Null. |
plan_handle |
varbinary(64) | Jeton qui identifie de façon unique un plan d’exécution de requête pour un lot en cours d’exécution. Autorise la valeur Null. |
query_plan |
xml | Contient la représentation Showplan du plan d'exécution au moment de l'exécution de la requête, spécifié avec plan_handle contenant des statistiques partielles. Le plan d'exécution de requêtes est au format XML. Un plan est généré pour chaque lot contenant par exemple des instructions Transact-SQL ad hoc, des appels de procédures stockées et des appels de fonctions définies par l'utilisateur. Autorise la valeur Null. |
Limites
En raison d’une violation d’accès aléatoire (AV) possible lors de l’exécution d’une procédure stockée de surveillance avec la sys.dm_exec_query_statistics_xml DMV, la valeur <ParameterList> d’attribut ParameterRuntimeValue Showplan XML a été supprimée dans SQL Server 2017 (14.x) CU 26 et SQL Server 2019 (15.x) CU 12. Cette valeur peut être utile lors de la résolution des problèmes de procédures stockées longues. Vous pouvez réactiver cette valeur dans SQL Server 2017 (14.x) CU 31, SQL Server 2019 (15.x) CU 19 et versions ultérieures, à l’aide de l’indicateur de trace 2446. Cet indicateur de trace permet la collecte de la valeur du paramètre d’exécution au coût de l’introduction d’une surcharge supplémentaire.
Caution
L’indicateur de trace 2446 n’est pas destiné à être activé en continu dans un environnement de production, mais uniquement à des fins de résolution des problèmes limitées dans le temps. L’utilisation de cet indicateur de trace introduit une surcharge supplémentaire et éventuellement significative du processeur et de la mémoire, car il génère un fragment XML Showplan avec des informations sur les paramètres d’exécution, que la vue dynamique sys.dm_exec_query_statistics_xml soit appelée ou non.
Dans SQL Server 2022 (16.x), Azure SQL Database et Azure SQL Managed Instance, vous pouvez accomplir les mêmes fonctionnalités au niveau de la base de données à l’aide de l’option FORCE_SHOWPLAN_RUNTIME_PARAMETER_COLLECTION ALTER DATABASE SCOPED CONFIGURATION (Transact-SQL).
Notes
Cette fonction système est disponible à partir de SQL Server 2016 (13.x) avec Service Pack 1. Pour plus d’informations, consultez la base de connaissances 3190871.
Cette fonction système fonctionne sous une infrastructure de profilage de statistiques d’exécution de requêtes standard et légère. Pour plus d’informations, consultez Infrastructure du profilage de requête.
Dans les conditions suivantes, aucune sortie Showplan n'est retournée dans la query_plan colonne de la table retournée pour sys.dm_exec_query_statistics_xml:
- Si le plan de requête qui correspond au session_id spécifié n’est plus en cours d’exécution, la
query_plancolonne de la table retournée est null. Par exemple, cette condition peut se produire s’il y a un délai entre le moment où le handle de plan a été capturé et quand il a été utilisé avecsys.dm_exec_query_statistics_xml
En raison d’une limitation du nombre de niveaux imbriqués autorisés dans le type de données xml , sys.dm_exec_query_statistics_xml ne peut pas retourner de plans de requête qui répondent ou dépassent 128 niveaux d’éléments imbriqués. Dans les versions antérieures de SQL Server, cette condition empêchait les retours par le plan de requête et générait l’erreur 6335. Dans SQL Server 2005 (9.x) Service Pack 2 et versions ultérieures, la query_plan colonne retourne NULL.
autorisations
Nécessite VIEW SERVER STATE une autorisation sur le serveur, dans SQL Server 2019 (15.x) et les versions antérieures.
Nécessite VIEW SERVER PERFORMANCE STATE une autorisation sur le serveur, dans SQL Server 2022 (16.x) et versions ultérieures.
Nécessite l’autorisation VIEW DATABASE STATE dans la base de données, sur les niveaux Premium de SQL Database.
Requiert un compte administrateur du serveur ou un compte administrateur Microsoft Entra sur SQL Database Standard et Basic Tiers.
Exemples
R. Examinez le plan de requête en temps réel et les statistiques d'exécution pour un lot en cours d’exécution.
L'exemple suivant interroge sys.dm_exec_requests afin de rechercher la requête qui vous intéresse et de copier son session_id de la sortie.
SELECT *
FROM sys.dm_exec_requests;
GO
Ensuite, pour obtenir le plan de requête en direct et les statistiques d'exécution, utilisez la session_id copiée avec la fonction système sys.dm_exec_query_statistics_xml. Exécutez cette requête dans une session différente de la session dans laquelle votre requête est en cours d’exécution.
SELECT * FROM sys.dm_exec_query_statistics_xml(< copied session_id >);
GO
Ou, combinées pour toutes les demandes en cours d’exécution. Exécutez cette requête dans une session différente de la session dans laquelle votre requête est en cours d’exécution.
SELECT eqs.query_plan,
er.session_id,
er.request_id,
er.database_id,
er.start_time,
er.[status],
er.wait_type,
er.wait_resource,
er.last_wait_type,
(er.cpu_time / 1000) AS cpu_time_sec,
(er.total_elapsed_time / 1000) / 60 AS elapsed_time_minutes,
(er.logical_reads * 8) / 1024 AS logical_reads_KB,
er.granted_query_memory,
er.dop,
er.row_count,
er.query_hash,
er.query_plan_hash
FROM sys.dm_exec_requests AS er
CROSS APPLY sys.dm_exec_query_statistics_xml(session_id) AS eqs
WHERE er.session_id <> @@SPID;
GO