sys.dm_exec_requests (Transact-SQL)
S’applique à : SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW) SQL analytics endpoint in Microsoft Fabric Warehouse in Microsoft Fabric
Retourne des informations sur chacune des demandes qui s’exécutent dans SQL Server. Pour plus d’informations sur les demandes, consultez Guide de l’architecture des threads et des tâches.
Remarque
Pour l’appeler à partir d’un pool SQL dédié dans Azure Synapse Analytics ou Analytics Platform System (PDW), consultez sys.dm_pdw_exec_requests (Transact-SQL). Pour le pool SQL serverless ou Microsoft Fabric, utilisez sys.dm_exec_requests
.
Nom de la colonne | Type de données | Description |
---|---|---|
session_id |
smallint | ID de la session à laquelle cette demande est liée. N'accepte pas la valeur NULL. |
request_id |
int | ID de la demande. Unique dans le contexte de la session. N'accepte pas la valeur NULL. |
start_time |
datetime | Horodateur lors la réception de la demande. N'accepte pas la valeur NULL. |
status |
nvarchar(30) | Statut de la demande. Peut avoir l’une des valeurs suivantes : background rollback exécution en cours exécutable en veille interrompu N'accepte pas la valeur NULL. |
command |
nvarchar(32) | Identifie le type de commande en cours de traitement. Voici quelques valeurs possibles de types de commandes courants : SELECT INSERT UPDATE DELETE BACKUP LOG BACKUP DATABASE DBCC FOR Le texte de la requête peut être récupéré à l’aide sys.dm_exec_sql_text de la requête correspondante sql_handle . Des processus système internes définissent la commande en fonction du type de tâche à exécuter. Voici quelques valeurs possibles de tâches :LOCK MONITOR CHECKPOINTLAZY WRITER N'accepte pas la valeur NULL. |
sql_handle |
varbinary(64) | Jeton identifiant de manière unique le traitement ou la procédure stockée dont fait partie la requête. Autorise la valeur Null. |
statement_start_offset |
int | Indique, en octets et à compter de 0, la position de départ de l’instruction en cours d’exécution pour le lot en cours d’exécution ou l’objet persistant. Cette valeur peut être utilisée avec les fonctions de gestion dynamique sql_handle , statement_end_offset et sys.dm_exec_sql_text pour récupérer l’instruction en cours d’exécution de la demande. Autorise la valeur Null. |
statement_end_offset |
int | Indique, en octets et à compter de 0, la position de fin de l’instruction en cours d’exécution pour le lot en cours d’exécution ou l’objet persistant. Cette valeur peut être utilisée avec les fonctions de gestion dynamique sql_handle , statement_start_offset et sys.dm_exec_sql_text pour récupérer l’instruction en cours d’exécution de la demande. Autorise la valeur Null. |
plan_handle |
varbinary(64) | Jeton identifiant de manière unique un plan d’exécution de requête pour un lot en cours d’exécution. Autorise la valeur Null. |
database_id |
smallint | ID de la base de données dans laquelle la requête s'exécute. N'accepte pas la valeur NULL. Dans la base de données Azure SQL, les valeurs sont uniques au sein d’une base de données unique ou d’un pool élastique, mais pas dans un serveur logique. |
user_id |
int | ID de l'utilisateur qui a envoyé la demande. N'accepte pas la valeur NULL. |
connection_id |
uniqueidentifier | ID de la connexion à laquelle la demande est parvenue. Autorise la valeur Null. |
blocking_session_id |
smallint | ID de la session qui bloque la demande. Si cette colonne est NULL ou 0 , la requête n’est pas bloquée, ou les informations de session de la session bloquante ne sont pas disponibles (ou ne peuvent pas être identifiées). Pour plus d’informations, consultez Compréhension et résolution des problèmes bloquants dans SQL Server.-2 = La ressource qui bloque la demande appartient à une transaction distribuée orpheline. -3 = La ressource qui bloque la demande appartient à une transaction de récupération différée. -4 = session_id du propriétaire du verrou bloquant n’a pas pu être déterminé pour l’instant en raison des transitions d’état de latch internes.-5 = session_id du propriétaire du verrou bloquant n’a pas pu être déterminé, car il n’est pas suivi pour ce type de verrou (par exemple, pour un verrou SH).Par lui-même, blocking_session_id -5 n’indique pas de problème de performances. -5 indique que la session attend une action asynchrone. Avant -5 d’être introduite, la même session aurait montré blocking_session_id 0 , même si elle était toujours dans un état d’attente.Selon la charge de travail, l’observation blocking_session_id = -5 peut être une occurrence courante. |
wait_type |
nvarchar(60) | Si la demande est actuellement bloquée, cette colonne retourne le type d'attente. Autorise la valeur Null. Pour plus d’informations sur les types d’attentes, consultez sys.dm_os_wait_stats (Transact-SQL). |
wait_time |
int | Si la demande est actuellement bloquée, cette colonne retourne la durée de l'attente, en millisecondes. N'accepte pas la valeur NULL. |
last_wait_type |
nvarchar(60) | Si la demande a été bloquée précédemment, cette colonne indique le type de la dernière attente. N'accepte pas la valeur NULL. |
wait_resource |
nvarchar (256) | Si la demande est actuellement bloquée, cette colonne retourne la ressource attendue par la demande. N'accepte pas la valeur NULL. |
open_transaction_count |
int | Nombre de transactions ouvertes pour cette demande. N'accepte pas la valeur NULL. |
open_resultset_count |
int | Nombre de jeux de résultats ouverts pour cette demande. N'accepte pas la valeur NULL. |
transaction_id |
bigint | ID de la transaction dans laquelle cette demande s'exécute. N'accepte pas la valeur NULL. |
context_info |
varbinary(128) | Valeur CONTEXT_INFO de la session. Autorise la valeur Null. |
percent_complete |
real | Le pourcentage de travail terminé pour les commandes suivantes :ALTER INDEX REORGANIZE AUTO_SHRINK option avec ALTER DATABASE BACKUP DATABASE DBCC CHECKDB DBCC CHECKFILEGROUP DBCC CHECKTABLE DBCC INDEXDEFRAG DBCC SHRINKDATABASE DBCC SHRINKFILE RECOVERY RESTORE DATABASE ROLLBACK TDE ENCRYPTION N'accepte pas la valeur NULL. |
estimated_completion_time |
bigint | Interne uniquement. N'accepte pas la valeur NULL. |
cpu_time |
int | Quantité de temps UC (en millisecondes) utilisée par la demande. N'accepte pas la valeur NULL. |
total_elapsed_time |
int | Temps total écoulé en millisecondes depuis l'arrivée de la demande. N'accepte pas la valeur NULL. |
scheduler_id |
int | ID du planificateur qui planifie cette demande. Autorise la valeur Null. |
task_address |
varbinary(8) | Adresse mémoire de la tâche associée à la demande. Autorise la valeur Null. |
reads |
bigint | Nombre de lectures effectuées par la demande. N'accepte pas la valeur NULL. |
writes |
bigint | Nombre d'écritures effectuées par la demande. N'accepte pas la valeur NULL. |
logical_reads |
bigint | Nombre de lectures logiques effectuées par la demande. N'accepte pas la valeur NULL. |
text_size |
int | Valeur du paramètre TEXTSIZE pour la demande. N'accepte pas la valeur NULL. |
language |
nvarchar(128) | Valeur du paramètre de langue pour la demande. Autorise la valeur Null. |
date_format |
nvarchar(3) | Valeur du paramètre DATEFORMAT pour la demande. Autorise la valeur Null. |
date_first |
smallint | Valeur du paramètre DATEFIRST pour la demande. N'accepte pas la valeur NULL. |
quoted_identifier |
bit | 1 = QUOTED_IDENTIFIER est activé (ON) pour la demande. Sinon, la valeur est 0. N'accepte pas la valeur NULL. |
arithabort |
bit | 1 = ARITHABORT est activé (ON) pour la demande. Sinon, la valeur est 0. N'accepte pas la valeur NULL. |
ansi_null_dflt_on |
bit | 1 = ANSI_NULL_DFLT_ON est activé (ON) pour la demande. Sinon, la valeur est 0. N'accepte pas la valeur NULL. |
ansi_defaults |
bit | 1 = ANSI_DEFAULTS est activé (ON) pour la demande. Sinon, la valeur est 0. N'accepte pas la valeur NULL. |
ansi_warnings |
bit | 1 = ANSI_WARNINGS est activé (ON) pour la demande. Sinon, la valeur est 0. N'accepte pas la valeur NULL. |
ansi_padding |
bit | 1 = ANSI_PADDING est activé (ON) pour la demande. Sinon, la valeur est 0. N'accepte pas la valeur NULL. |
ansi_nulls |
bit | 1 = ANSI_NULLS est activé (ON) pour la demande. Sinon, la valeur est 0. N'accepte pas la valeur NULL. |
concat_null_yields_null |
bit | 1 = CONCAT_NULL_YIELDS_NULL est activé (ON) pour la demande. Sinon, la valeur est 0. N'accepte pas la valeur NULL. |
transaction_isolation_level |
smallint | Niveau d'isolation avec lequel la transaction pour cette demande est créée. N'accepte pas la valeur NULL. 0 = Non spécifié 1 = ReadUncommitted 2 = Lecture validée 3 = Répétable 4 = Sérialisable 5 = Instantané |
lock_timeout |
int | Délai d'attente de verrou externe pour la demande, en millisecondes. N'accepte pas la valeur NULL. |
deadlock_priority |
int | Paramètre DEADLOCK_PRIORITY de la demande. N'accepte pas la valeur NULL. |
row_count |
bigint | Nombre de lignes retournées au client par cette demande. N'accepte pas la valeur NULL. |
prev_error |
int | Dernière erreur générée pendant l'exécution de la demande. N'accepte pas la valeur NULL. |
nest_level |
int | Niveau d'imbrication actuel du code en cours d'exécution sur la demande. N'accepte pas la valeur NULL. |
granted_query_memory |
int | Nombre de pages allouées à l'exécution d'une requête dans la demande. N'accepte pas la valeur NULL. |
executing_managed_code |
bit | Indique si une demande spécifique est en train d'exécuter des objets CLR (Common Language Runtime) tels que des routines, des types et des déclencheurs. Cette valeur est définie pour toute la durée pendant laquelle un objet CLR réside dans la pile, même lorsque Transact-SQL est exécuté à partir du Common Language Runtime. N'accepte pas la valeur NULL. |
group_id |
int | ID du groupe de charge de travail auquel cette requête appartient. N'accepte pas la valeur NULL. |
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. |
statement_sql_handle |
varbinary(64) | S’applique à : SQL Server 2014 (12.x) et versions ultérieures.sql_handle de la requête individuelle.Cette colonne est Null si le Magasin des requêtes n’est pas activé pour la base de données. |
statement_context_id |
bigint | S’applique à : SQL Server 2014 (12.x) et versions ultérieures. Clé étrangère facultative vers sys.query_context_settings .Cette colonne est Null si le Magasin des requêtes n’est pas activé pour la base de données. |
dop |
int | S’applique à : SQL Server 2016 (13.x) et versions ultérieures. Degré de parallélisme de la requête. |
parallel_worker_count |
int | S’applique à : SQL Server 2016 (13.x) et versions ultérieures. Nombre de Workers parallèles réservés s’il s’agit d’une requête parallèle. |
external_script_request_id |
uniqueidentifier | S’applique à : SQL Server 2016 (13.x) et versions ultérieures. ID de demande de script externe associé à la demande actuelle. |
is_resumable |
bit | S’applique à : SQL Server 2017 (14.x) et versions ultérieures. Indique si la demande est une opération d’index pouvant être reprise. |
page_resource |
binary(8) | S’applique à : SQL Server 2019 (15.x) Représentation hexadécimale sur 8 octets de la ressource de page si la colonne wait_resource contient une page. Pour plus d’informations, consultez sys.fn_PageResCracker. |
page_server_reads |
bigint | S’applique à : Azure SQL Database Hyperscale Nombre de lectures de serveur de pages effectuées par la demande. N'accepte pas la valeur NULL. |
dist_statement_id |
uniqueidentifier | S’applique à : SQL Server 2022 et versions ultérieures, Azure SQL Database, Azure SQL Managed Instance, Azure Synapse Analytics (pools serverless uniquement) et Microsoft Fabric ID unique de l’instruction pour la demande envoyée. N'accepte pas la valeur NULL. |
Notes
Pour exécuter du code externe à SQL Server (par exemple des procédures stockées étendues et des requêtes distribuées), un thread doit s’exécuter en dehors du contrôle du planificateur non préemptif. Pour ce faire, un processus de travail passe en mode préemptif. Les valeurs temporelles retournées par cette vue de gestion dynamique n’incluent pas le temps passé en mode préemptif.
En cas d’exécution de demandes parallèles en mode ligne, SQL Server affecte un thread de travail à la coordination des threads de travail chargés d’exécuter les tâches qui leur sont attribuées. Dans cette vue DMV, seul le thread coordinateur est visible pour la demande. Les colonnes reads
, writes
, logical_reads
et row_count
ne sont pas mises à jour pour le thread coordinateur. Les colonnes wait_type
, wait_time
, last_wait_type
, wait_resource
et granted_query_memory
sont uniquement mises à jour pour le thread coordinateur. Pour plus d’informations, consultez le Guide de l’architecture des threads et des tâches.
La wait_resource
colonne contient des informations similaires dans resource_description
sys.dm_tran_locks (Transact-SQL), mais elle est mise en forme différemment.
autorisations
Si l’utilisateur dispose VIEW SERVER STATE
d’une autorisation sur le serveur, l’utilisateur voit toutes les sessions en cours d’exécution sur l’instance de SQL Server ; sinon, l’utilisateur voit uniquement la session active. L’autorisation VIEW SERVER STATE
ne peut pas être accordée dans Azure SQL Database. sys.dm_exec_requests
est donc toujours limité à la connexion actuelle.
Dans les scénarios de groupe de disponibilité, si le réplica secondaire est défini sur l’intention en lecture seule, la connexion à la base de données secondaire doit spécifier son intention d’application dans chaîne de connexion paramètres en ajoutant applicationintent=readonly
. Sinon, la vérification sys.dm_exec_requests
d’accès ne passe pas pour les bases de données du groupe de disponibilité, même si VIEW SERVER STATE
l’autorisation est présente.
Pour SQL Server 2022 (16.x) et versions ultérieures, sys.dm_exec_requests
nécessite l’autorisation VIEW SERVER PERFORMANCE STATE sur le serveur.
Exemples
R. Rechercher le texte de requête d’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 sql_handle
de la sortie.
SELECT * FROM sys.dm_exec_requests;
GO
Puis, pour obtenir le texte d'instruction, utilisez le sql_handle
copié avec la fonction système sys.dm_exec_sql_text(sql_handle)
.
SELECT * FROM sys.dm_exec_sql_text(< copied sql_handle >);
GO
B. Rechercher tous les verrous qu’un lot en cours d’exécution contient
L’exemple suivant illustre l’interrogation de sys.dm_exec_requests
pour rechercher le lot souhaité et copier son transaction_id
dans la sortie.
SELECT * FROM sys.dm_exec_requests;
GO
Pour rechercher les informations de verrou, utilisez le transaction_id
copié avec la fonction système sys.dm_tran_locks
.
SELECT * FROM sys.dm_tran_locks
WHERE request_owner_type = N'TRANSACTION'
AND request_owner_id = < copied transaction_id >;
GO
C. Rechercher toutes les demandes actuellement bloquées
L’exemple suivant illustre l’interrogation de sys.dm_exec_requests
pour rechercher des informations sur les demandes bloquées.
SELECT session_id,
status,
blocking_session_id,
wait_type,
wait_time,
wait_resource,
transaction_id
FROM sys.dm_exec_requests
WHERE status = N'suspended';
GO
D. Commander des demandes existantes par processeur
SELECT
[req].[session_id],
[req].[start_time],
[req].[cpu_time] AS [cpu_time_ms],
OBJECT_NAME([ST].[objectid], [ST].[dbid]) AS [ObjectName],
SUBSTRING(
REPLACE(
REPLACE(
SUBSTRING(
[ST].[text], ([req].[statement_start_offset] / 2) + 1,
((CASE [req].[statement_end_offset]
WHEN -1 THEN DATALENGTH([ST].[text])
ELSE [req].[statement_end_offset]
END - [req].[statement_start_offset]
) / 2
) + 1
), CHAR(10), ' '
), CHAR(13), ' '
), 1, 512
) AS [statement_text]
FROM
[sys].[dm_exec_requests] AS [req]
CROSS APPLY [sys].dm_exec_sql_text([req].[sql_handle]) AS [ST]
ORDER BY
[req].[cpu_time] DESC;
GO
Contenu connexe
- Vues de gestion dynamique système
- Fonctions et vues de gestion dynamique relatives à l'exécution (Transact-SQL)
- sys.dm_os_memory_clerks (Transact-SQL)
- sys.dm_os_sys_info (Transact-SQL)
- sys.dm_exec_query_memory_grants (Transact-SQL)
- sys.dm_exec_query_plan (Transact-SQL)
- sys.dm_exec_sql_text (Transact-SQL)
- SQL Server, objet SQL Statistics
- Guide d’architecture de traitement des requêtes
- Guide d’architecture de conversation et de tâche
- Guide du verrouillage des transactions et du versioning des lignes
- Compréhension et résolution des problèmes bloquants dans SQL Server