sp_who (Transact-SQL)

Stellt Informationen zu aktuellen Benutzern, Sitzungen und Prozessen in einer Instanz von Microsoft SQL Server Database Engine (Datenbankmodul) bereit. Die Informationen können gefiltert werden, damit nur die Prozesse zurückgegeben werden, die sich nicht im Leerlauf befinden, die zu einem bestimmten Benutzer gehören oder die zu einer bestimmten Sitzung gehören.

Themenlink (Symbol)Transact-SQL-Syntaxkonventionen

Syntax

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

Argumente

  • [ @loginame = ] 'login' | session ID | 'ACTIVE'
    Wird zum Filtern des Resultsets verwendet.

    login ist vom Datentyp sysname und dient zum Identifizieren von Prozessen, deren Besitzer ein bestimmter Anmeldename ist.

    session ID (SPID in SQL Server 2000 und früher) ist eine Sitzungs-ID, die zu der SQL Server-Instanz gehört. session ID ist vom Datentyp smallint.

    ACTIVE schließt Sitzungen aus, die auf den nächsten Befehl vom Benutzer warten.

    Wenn kein Wert angegeben ist, meldet die Prozedur alle zur Instanz gehörenden Sitzungen.

Rückgabecodewerte

0 (Erfolg) oder 1 (Fehler)

Resultsets

sp_who gibt ein Resultset mit folgenden Informationen zurück.

Spalte

Datentyp

Beschreibung

spid

smallint

Sitzungs-ID.

ecid

smallint

Ausführungskontext-ID für einen bestimmten Thread, der einer bestimmten Sitzungs-ID zugeordnet ist.

ECID = {0, 1, 2, 3, ...n}, wobei 0 immer den übergeordneten Thread oder Hauptthread darstellt und {1, 2, 3, ...n} die Subthreads.

status

nchar(30)

Prozessstatus. Die folgenden Werte sind möglich:

dormant. SQL Server setzt die Sitzung zurück.

running. Die Sitzung führt einen oder mehrere Batches aus. Wenn Multiple Active Result Sets (MARS) aktiviert ist, kann eine Sitzung mehrere Batches ausführen. Weitere Informationen finden Sie unter Verwenden von Multiple Active Result Sets (MARS)..

background. Die Sitzung führt einen Hintergrundtask aus, z. B. Deadlockerkennung.

rollback. Die Sitzung führt gerade einen Transaktionsrollback aus.

pending. Die Sitzung wartet, dass ein Arbeitsthread verfügbar wird.

runnable. Der Task der Sitzung wartet in der ausführbaren Warteschlange eines Zeitplanungsmoduls darauf, ein Zeitquantum zu erhalten.

spinloop. Der Task der Sitzung wartet darauf, dass ein Spinlock frei wird.

suspended. Die Sitzung wartet, dass ein Ereignis, z. B. E/A, abgeschlossen wird.

loginame

nchar(128)

Dem entsprechenden Prozess zugeordneter Benutzername.

hostname

nchar(128)

Host- oder Computername für den Prozess.

blk

char(5)

Sitzungs-ID für den blockierenden Prozess, falls vorhanden. Andernfalls ist diese Spalte 0.

Wenn eine Transaktion einer bestimmten Sitzungs-ID zugeordnet ist und durch eine verwaiste verteilte Transaktion blockiert wird, gibt diese Spalte den Wert -2 für die blockierende verwaiste Transaktion zurück.

dbname

nchar(128)

Vom Prozess verwendete Datenbank.

cmd

nchar(16)

Database Engine (Datenbankmodul)-Befehl (Transact-SQL-Anweisung, interner Database Engine (Datenbankmodul)-Prozess usw.), der für den Prozess ausgeführt wird.

request_id

int

ID für Anforderungen, die in einer bestimmten Sitzung ausgeführt werden.

Bei paralleler Verarbeitung werden für die bestimmte Sitzungs-ID Subthreads erstellt. Der Hauptthread wird mit spid = <xxx> und ecid =0 angegeben. Die anderen Subthreads weisen denselben Wert spid = <xxx> auf, aber mit ecid > 0.

Hinweise

Ein blockierender Prozess, möglicherweise mit einer exklusiven Sperre, hat Ressourcen, die von einem anderen Prozess benötigt werden.

In SQL Server 2000 und höher wird allen verwaisten verteilten Transaktionen der Sitzungs-ID-Wert '-2' zugewiesen. Verwaiste verteilte Transaktionen sind verteilte Transaktionen, denen keine Sitzungs-ID zugeordnet ist. Weitere Informationen finden Sie unter Verwenden markierter Transaktionen (vollständiges Wiederherstellungsmodell).

In SQL Server 2000 und höher sind die Sitzungs-ID-Werte von 1 bis 50 für die interne Verwendung reserviert, die Sitzungs-ID-Werte ab 51 stellen Benutzersitzungen dar.

Berechtigungen

Erfordert die VIEW SERVER STATE-Berechtigung auf dem Server, um alle zurzeit ausgeführten Sitzungen in der Instanz von SQL Server anzuzeigen. Andernfalls wird dem Benutzer nur die aktuelle Sitzung angezeigt.

Beispiele

A. Auflisten aller aktuellen Prozesse

Im folgenden Beispiel wird sp_who ohne Parameter verwendet, um alle aktuellen Benutzer zurückzugeben.

USE master;
GO
EXEC sp_who;
GO

B. Auflisten der Prozesse eines bestimmten Benutzers

Das folgende Beispiel veranschaulicht das Anzeigen von Informationen zu einem einzelnen aktuellen Benutzer anhand des Benutzernamens.

USE master;
GO
EXEC sp_who 'janetl';
GO

C. Anzeigen aller aktiven Prozesse

USE master;
GO
EXEC sp_who 'active';
GO

D. Anzeigen eines bestimmten, durch eine Sitzungs-ID identifizierten Prozesses

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