sp_who (Transact-SQL)

S’applique à :SQL Server

Fournit des informations sur les utilisateurs, sessions et processus actuels dans une instance du Moteur de base de données SQL Server. Les informations peuvent être filtrées pour retourner uniquement les processus qui ne sont pas inactifs, qui appartiennent à un utilisateur spécifique ou qui appartiennent à une session spécifique.

Conventions de la syntaxe Transact-SQL

Syntaxe

sp_who [ [ @loginame = ] { 'login' | *session_id* | 'ACTIVE' } ]
[ ; ]

Arguments

[ @loginame = ] { 'login' | session_id | 'ACTIVE' }

Permet de filtrer le jeu de résultats.

  • login est sysname qui identifie les processus appartenant à une connexion particulière.

  • session_id est un numéro d’identification de session appartenant à l’instance SQL Server. session_id est petite.

  • ACTIVE exclut les sessions qui attendent la commande suivante de l’utilisateur.

Si aucune valeur n'est fournie, la procédure répertorie toutes les sessions appartenant à l'instance.

Valeurs des codes de retour

0 (réussite) ou 1 (échec).

Jeu de résultats

sp_who retourne un jeu de résultats avec les informations suivantes.

Colonne Type de données Description
spid smallint ID de session.
ecid smallint ID du contexte d'exécution d'un thread donné associé à un ID de session spécifique.

ECID = { 0, 1, 2, 3, ...n }, où 0 représente toujours le thread principal ou parent, et { 1, 2, 3, ...n } représentent les sous-reads.
status nchar(30) État du processus Les valeurs possibles sont les suivantes :

- dormant. SQL Server réinitialise la session.

- running. La session exécute un ou plusieurs traitements. Lorsque la fonctionnalité MARS (Multiple Active Result Sets) est activée, une session peut exécuter plusieurs traitements. Pour plus d’informations, consultez Utilisation de MARS (Multiple Active Result Sets).

- background. La session exécute une tâche en arrière-plan, telle qu'une détection de blocage.

- rollback. Un processus d'annulation est en cours dans la session.

- pending. La session attend qu'un thread de travail soit disponible.

- runnable. La tâche de la session figure dans la file d'attente exécutable d'un planificateur lors de l'attente de l'obtention d'un quantum.

- spinloop. La tâche de la session attend qu'un verrouillage total de l'UC se libère.

- suspended. La session attend la fin d'un événement, tel qu'une E/S.
loginame nchar(128) Nom de connexion associé à ce processus particulier
hostname nchar(128) Nom de l'hôte ou de l'ordinateur pour chaque processus
blk char(5) ID de session du processus bloquant, s'il en existe un. Sinon, cette colonne est 0.

Lorsqu’une transaction associée à un ID de session spécifié est bloquée par une transaction distribuée orpheline, cette colonne retourne une -2 valeur pour la transaction orpheline bloquante.
dbname nchar(128) Base de données dont se sert le processus
cmd nchar(16) Moteur de base de données commande (instruction Transact-SQL, processus de Moteur de base de données interne, et ainsi de suite) en cours d’exécution pour le processus. Dans SQL Server 2019 (15.x) et versions ultérieures, le type de données est nchar(26).
request_id int ID des demandes s'exécutant dans une session spécifique

Avec le traitement parallèle, les sous-threads sont créés pour l’ID de session spécifique. Le thread principal est indiqué sous la forme spid = <xxx> et ecid = 0. Les autres sous-reads ont le même spid = <xxx>, mais avec ecid > 0.

Notes

Un processus bloquant, qui peut disposer d'un verrou exclusif, est un processus qui conserve les ressources dont un autre processus a besoin.

Toutes les transactions distribuées orphelines sont affectées à la valeur d’ID de session de -2. Les transactions distribuées orphelines sont des transactions distribuées qui ne sont associées à aucun ID de session. Pour plus d’informations, consultez Utiliser des transactions marquées pour récupérer les bases de données associées de manière cohérente (mode de récupération complète).

Interrogez la is_user_process colonne de sys.dm_exec_sessions processus système pour séparer les processus système des processus utilisateur.

Autorisations

Nécessite l’autorisation VIEW SERVER STATE sur le serveur pour afficher toutes les sessions en cours d’exécution sur l’instance de SQL Server. Dans le cas contraire, l'utilisateur ne voit que la session en cours.

Exemples

R. Répertorier tous les processus actuels

L'exemple suivant utilise sp_who sans paramètres pour donner la liste de tous les utilisateurs actuels.

USE master;
GO
EXEC sp_who;
GO

B. Répertorier le processus d’un utilisateur spécifique

L'exemple suivant montre comment afficher des informations sur un utilisateur actuel par nom de connexion.

USE master;
GO
EXEC sp_who 'janetl';
GO

C. Afficher tous les processus actifs

USE master;
GO
EXEC sp_who 'active';
GO

D. Afficher un processus spécifique identifié par un ID de session

USE master;
GO
EXEC sp_who '10' --specifies the process_id;
GO