sp_who (Transact-SQL)
Gilt für:SQL Server
Stellt Informationen zu aktuellen Benutzern, Sitzungen und Prozessen in einer instance der SQL Server-Datenbank-Engine bereit. Die Informationen können so gefiltert werden, dass nur die Prozesse zurückgegeben werden, die sich nicht im Leerlauf befinden, die zu einem bestimmten Benutzer gehören oder zu einer bestimmten Sitzung gehören.
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 sysname , der Prozesse identifiziert, die zu einer bestimmten Anmeldung gehören.
session_id ist eine Sitzungsidentifikationsnummer, die zum SQL Server instance gehört. session_id ist smallint.
ACTIVE
schließt Sitzungen aus, die auf den nächsten Befehl des Benutzers 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 den folgenden Informationen zurück.
Column | 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 Standard oder übergeordneten Thread darstellt, und { 1, 2, 3, ... n } stellt die Subthreads dar. |
status |
nchar(30) | Prozessstatus. Mögliche Werte sind: - dormant . SQL Server setzt die Sitzung zurück.- running . Die Sitzung führt einen oder mehrere Batches aus. Wenn MARS (Multiple Active Result Sets) 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 0 diese Spalte .Wenn eine Transaktion, die einer angegebenen Sitzungs-ID zugeordnet ist, durch eine verwaiste verteilte Transaktion blockiert wird, gibt diese Spalte eine -2 für die blockierende verwaiste Transaktion zurück. |
dbname |
nchar(128) | Vom Prozess verwendete Datenbank. |
cmd |
nchar(16) | Der Datenbank-Engine-Befehl (Transact-SQL-Anweisung, interner Datenbank-Engine-Prozess usw.), der für den Prozess ausgeführt wird. In SQL Server 2019 (15.x) und höheren Versionen ist der Datentyp nchar(26). |
request_id |
int | ID für Anforderungen, die in einer bestimmten Sitzung ausgeführt werden. |
Bei der parallelen Verarbeitung werden Subthreads für die spezifische Sitzungs-ID erstellt. Der Hauptthread wird mit spid = <xxx>
und ecid = 0
angegeben. Die anderen Unterthreads haben denselben spid = <xxx>
, aber mit ecid > 0
.
Bemerkungen
Ein blockierender Prozess, möglicherweise mit einer exklusiven Sperre, hat Ressourcen, die von einem anderen Prozess benötigt werden.
Allen verwaisten verteilten Transaktionen wird der Sitzungs-ID-Wert von -2
zugewiesen. Verwaiste verteilte Transaktionen sind verteilte Transaktionen, die keiner Sitzungs-ID zugeordnet sind. Weitere Informationen finden Sie unter Verwenden markierter Transaktionen zum konsistenten Wiederherstellen verwandter Datenbanken (vollständiges Wiederherstellungsmodell).
Fragen Sie die is_user_process
Spalte von ab sys.dm_exec_sessions
, um Systemprozesse von Benutzerprozessen zu trennen.
Berechtigungen
Erfordert die VIEW SERVER STATE-Berechtigung auf dem Server, um alle ausgeführten Sitzungen auf dem instance 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 des Prozesses 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 Prozesses, der durch eine Sitzungs-ID identifiziert wird
USE master;
GO
EXEC sp_who '10' --specifies the process_id;
GO