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 SQL Server de Microsoft. 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 rubriqueConventions 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 (SPID dans SQL Server 2000 et versions antérieures) 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.

Retourne les valeurs du code

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 SQL Server (instruction Transact-SQL, processus du moteur de base de données SQL Server interne, 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.

Dans SQL Server 2000 et version ultérieure, 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 Utilisation des transactions marquées (mode de sauvegarde complète).

SQL Server 2000 et les versions ultérieures réservent les valeurs d'ID de session comprises entre 1 et 50 à un usage interne et utilisent 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