sp_who (Transact-SQL)

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

Icône Lien de rubrique Conventions de la syntaxe de Transact-SQL

Syntaxe

sp_who [ [ @loginame = ] 'login' | session ID | 'ACTIVE' ]

Arguments

  • [ @loginame = ] 'login' | session ID | 'ACTIVE'
    Permet de filtrer l'ensemble de résultats.

    Le paramètre login, de type sysname, identifie les processus appartenant à une connexion spécifique.

    session ID est un numéro d'identification de session appartenant à l'instance SQL Server. session ID est de type smallint.

    ACTIVE exclut les sessions en attente de la prochaine commande 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 (succès) ou 1 (échec)

Jeux de résultats

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

Colonne

Type de données

Description

spid

smallint

ID de la 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} les sous-threads.

status

nchar(30)

État du processus Les valeurs possibles sont les suivantes :

dormant. SQL Server réinitialise la session.

en cours d'exécution. 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).

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

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

en attente. La session attend qu'un thread de travail soit disponible.

exécutable. 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. Dans les autres cas, cette colonne a la valeur NULL.

Lorsqu'une transaction associée à un ID de session spécifié est bloquée par une transaction distribuée orpheline, cette colonne renvoie la valeur « -2 » pour la transaction orpheline qui bloque.

dbname

nchar(128)

Base de données dont se sert le processus

cmd

nchar(16)

Commande du moteur de base de données (instruction Transact-SQL, processus interne du moteur de base de données, etc.) s'exécutant pour le processus.

request_id

int

ID des demandes s'exécutant dans une session spécifique

En cas de traitement parallèle, des sous-threads sont créés pour l'lD de session spécifique. Le thread principal est indiqué sous la forme spid = <xxx> et ecid =0. Les autres sous-threads 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 reçoivent la valeur d'ID de session « -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 les transactions marquées pour récupérer des bases de données associées uniformément (mode de récupération complète).

SQL Server réserve les valeurs d'ID de session comprises entre 1 et 50 à un usage interne, et utilise les valeurs d'ID de session supérieures ou égales à 51 pour représenter les sessions utilisateur.

Autorisations

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

Exemples

A.Affichage de tous les processus en cours

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.Affichage des 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.Affichage de tous les processus actifs

USE master;
GO
EXEC sp_who 'active';
GO

D.Affichage d'un processus spécifique identifié par un ID de session

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

Voir aussi

Référence

sp_lock (Transact-SQL)

sys.sysprocesses (Transact-SQL)

Procédures stockées système (Transact-SQL)