sys.sp_who (Transact-SQL)

Gäller för:SQL Server

Tillhandahåller information om nuvarande användare, sessioner och processer i en instans av Databasmotor för SQL Server. Informationen kan filtreras för att endast returnera de processer som inte är inaktiva, som tillhör en specifik användare eller som tillhör en specifik session.

Transact-SQL syntaxkonventioner

Syntax

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

Arguments

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

Används för att filtrera resultatuppsättningen.

  • Inloggning är ett sysnamn som identifierar processer som tillhör en viss inloggning.

  • session_id är ett sessionsidentifieringsnummer som tillhör den SQL Server instansen. session_id är liten.

  • ACTIVE exkluderar sessioner som väntar på nästa kommando från användaren.

Om inget värde anges rapporterar proceduren alla sessioner som tillhör instansen.

Returnera kodvärden

0 (lyckades) eller 1 (fel).

Resultatuppsättning

sp_who returnerar en resultatuppsättning med följande information.

Column Datatyp Description
spid smallint Sessions-ID.
ecid smallint Exekveringskontext-ID för en given tråd kopplat till ett specifikt sessions-ID.

ECID = { 0, 1, 2, 3, ... n }, där 0 alltid representerar huvud- eller föräldratråden, och { 1, 2, 3, ... n } representerar deltrådarna.
status NCar(30) Processstatus. Möjliga värden är:

- dormant. SQL Server återställer sessionen.

- running. Sessionen kör en eller flera batcher. När Multiple Active Result Sets (MARS) är aktiverat kan en session köra flera batcher. Mer information finns i Använda flera aktiva resultatuppsättningar (MARS).

- background. Sessionen kör en bakgrundsuppgift, såsom deadlock-detektering.

- rollback. Sessionen har en transaktionsrullning under arbete.

- pending. Sessionen väntar på att en arbetstråd ska bli tillgänglig.

- runnable. Sessionens uppgift ligger i den körbara kön hos en schemaläggare medan man väntar på att få en tidskvant.

- spinloop. Sessionens uppgift är att vänta på att en spinlock ska bli fri.

- suspended. Sessionen väntar på att en händelse, såsom I/O, ska avslutas.
loginame nchar(128) Inloggningsnamn kopplat till den specifika processen.
hostname nchar(128) Värd- eller datornamn för varje process.
blk char(5) Sessions-ID för blockeringsprocessen, om det finns ett sådant. Annars är denna kolumn .0

När en transaktion kopplad till ett specificerat sessions-ID blockeras av en föräldralös distribuerad transaktion, returnerar denna kolumn a -2 för den blockerande föräldralösa transaktionen.
dbname nchar(128) Databas som används av processen.
cmd NCar(16) Database Engine kommando (Transact-SQL-sats, intern Database Engine process och så vidare) som körs för processen. I SQL Server 2019 (15.x) och senare versioner är datatypen nchar(26).
request_id int ID för förfrågningar som körs i en specifik session.

Vid parallell bearbetning skapas undertrådar för det specifika sessions-ID:t. Huvudtråden anges som spid = <xxx> och ecid = 0. De andra undertrådarna har samma spid = <xxx>, men med ecid > 0.

Remarks

En blockeringsprocess, som kan ha ett exklusivt lås, är en som håller resurser som en annan process behöver.

Alla föräldralösa distribuerade transaktioner tilldelas sessions-ID-värdet .-2 Föräldralösa distribuerade transaktioner är distribuerade transaktioner som inte är kopplade till något sessions-ID. För mer information, se Använd markerade transaktioner för att återställa relaterade databaser konsekvent.

Fråga kolumnen is_user_process i sys.dm_exec_sessions för att separera systemprocesser från användarprocesser.

Permissions

Kräver VIEW SERVER STATE-behörighet på servern för att se alla körande sessioner på instansen av SQL Server. Annars ser användaren endast den aktuella sessionen.

Examples

A. Lista alla aktuella processer

Följande exempel använder sp_who utan parametrar för att rapportera alla nuvarande användare.

USE master;
GO

EXECUTE sp_who;
GO

B. Lista en specifik användares process

Följande exempel visar hur man kan se information om en enskild nuvarande användare via inloggningsnamn.

USE master;
GO

EXECUTE sp_who 'janetl';
GO

C. Visa alla aktiva processer

USE master;
GO

EXECUTE sp_who 'active';
GO

D. Visa en specifik process identifierad av ett sessions-ID

USE master;
GO

EXECUTE sp_who '10'; --specifies the process_id;
GO