sys.sp_who (Transact-SQL)

Van toepassing op:SQL Server

Biedt informatie over huidige gebruikers, sessies en processen in een instantie van de SQL Server Database Engine. De informatie kan worden gefilterd om alleen die processen terug te geven die niet inactief zijn, die toebehoren tot een specifieke gebruiker of die tot een specifieke sessie behoren.

Transact-SQL syntaxis-conventies

Syntax

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

Arguments

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

Gebruikt om de resultaatset te filteren.

  • Login is een sysnaam die processen identificeert die bij een bepaalde login horen.

  • session_id is een sessie-identificatienummer dat behoort tot de SQL Server instantie. session_id is klein.

  • ACTIVE sluit sessies uit die wachten op het volgende commando van de gebruiker.

Als er geen waarde wordt vermeld, rapporteert de procedure alle sessies die bij de instantie horen.

Codewaarden retourneren

0 (geslaagd) of 1 (mislukt).

Resultaatset

sp_who geeft een resultaatset met de volgende informatie terug.

Rubriek Gegevenstype Description
spid smallint Sessie-id.
ecid smallint Uitvoeringscontext-ID van een bepaalde thread gekoppeld aan een specifieke sessie-ID.

ECID = { 0, 1, 2, 3, ... n }, waarbij 0 altijd de hoofd- of ouderthread vertegenwoordigt, en { 1, 2, 3, ... n } vertegenwoordigen de subthreads.
status nchar(30) Processtatus. Mogelijke waarden zijn:

- dormant. SQL Server reset de sessie.

- running. De sessie draait één of meer batches. Wanneer Multiple Active Result Sets (MARS) is ingeschakeld, kan een sessie meerdere batches uitvoeren. Raadpleeg Gebruik maken van meerdere actieve resultaatsets (MARS)voor meer informatie.

- background. De sessie voert een achtergrondtaak uit, zoals deadlockdetectie.

- rollback. De sessie heeft een transactie-rollback in uitvoering.

- pending. De sessie wacht op een worker-thread die beschikbaar komt.

- runnable. De taak van de sessie bevindt zich in de uitvoerbare wachtrij van een planner terwijl wacht op het ophalen van een tijdquantum.

- spinloop. De taak van de sessie is wachten tot een spinlock vrijkomt.

- suspended. De sessie wacht op een gebeurtenis, zoals I/O, om te voltooien.
loginame nchar(128) Inlognaam gekoppeld aan het betreffende proces.
hostname nchar(128) Host of computernaam voor elk proces.
blk char(5) Sessie-ID voor het blokkeringsproces, als die er is. Anders is 0deze kolom .

Wanneer een transactie gekoppeld aan een gespecificeerde sessie-ID wordt geblokkeerd door een verweesde gedistribueerde transactie, geeft deze kolom een -2 terug voor de blokkerende weestransactie.
dbname nchar(128) Database die door het proces wordt gebruikt.
cmd NCar(16) Database Engine commando (Transact-SQL statement, interne Database Engine proces, enzovoort) die voor het proces wordt uitgevoerd. In SQL Server 2019 (15.x) en latere versies is het datatype nchar(26).
request_id int ID voor verzoeken die in een specifieke sessie draaien.

Bij parallelle verwerking worden subthreads aangemaakt voor de specifieke sessie-ID. De hoofddraad wordt aangegeven als spid = <xxx> en ecid = 0. De andere subthreads hebben hetzelfde spid = <xxx>, maar dan met ecid > 0.

Remarks

Een blokkeringsproces, dat mogelijk een exclusieve lock heeft, is een proces dat middelen vasthoudt die een ander proces nodig heeft.

Alle verweesde gedistribueerde transacties krijgen de sessie-ID-waarde van -2toegewezen. Verweesde gedistribueerde transacties zijn gedistribueerde transacties die niet gekoppeld zijn aan een sessie-ID. Voor meer informatie, zie Gebruik Gemarkeerde Transacties om Gerelateerde databases Consistent te Herstellen.

Vraag de is_user_process kolom van sys.dm_exec_sessions op om systeemprocessen te scheiden van gebruikersprocessen.

Permissions

Vereist VIEW SERVER STATE-toestemming op de server om alle uitvoerende sessies op de instantie van SQL Server te zien. Anders ziet de gebruiker alleen de huidige sessie.

Examples

A. Vermeld alle huidige processen

Het volgende voorbeeld gebruikt sp_who zonder parameters om alle huidige gebruikers te rapporteren.

USE master;
GO

EXECUTE sp_who;
GO

B. Geef een specifieke gebruikersprocedure op

Het volgende voorbeeld laat zien hoe je informatie over een enkele huidige gebruiker kunt bekijken op basis van inlognaam.

USE master;
GO

EXECUTE sp_who 'janetl';
GO

C. Alle actieve processen weergeven

USE master;
GO

EXECUTE sp_who 'active';
GO

D. Toon een specifiek proces dat wordt geïdentificeerd door een sessie-ID

USE master;
GO

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