sys.sp_who (Transact-SQL)

platí pro:SQL Server

Poskytuje informace o současných uživatelích, relacích a procesech v instanci Databázový stroj systému SQL Server. Informace lze filtrovat tak, aby vracely pouze ty procesy, které nejsou nečinné, patří konkrétnímu uživateli nebo patří konkrétní relaci.

Transact-SQL konvence syntaxe

Syntax

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

Arguments

[ @loginame = ] { 'login' | session_id | 'AKTIVNÍ' }

Používá se k filtrování výsledné množiny.

  • Přihlášení je sysname , které identifikuje procesy patřící konkrétnímu přihlašovacímu číslu.

  • session_id je identifikační číslo relace patřící SQL Server instanci. session_id je malý.

  • ACTIVE Vylučuje relace, které čekají na další příkaz od uživatele.

Pokud není uvedena žádná hodnota, procedura hlásí všechny relace patřící dané instanci.

Hodnoty návratového kódu

0 (úspěch) nebo 1 (selhání).

Sada výsledků

sp_who vrací množinu výsledků s následujícími informacemi.

Column Datový typ Description
spid smallint ID relace.
ecid smallint ID kontextu provádění daného vlákna spojeného s konkrétním ID relace.

ECID = { 0, 1, 2, 3, ... n }, kde 0 vždy představuje hlavní nebo rodičovské vlákno, a { 1, 2, 3, ... n } představují podvlákna.
status nchar(30) Stav procesu. Možné hodnoty:

- dormant. SQL Server resetuje relaci.

- running. Sekce probíhá v jedné nebo více dávkách. Když je povoleno více aktivních sad výsledků (MARS), může relace spouštět více dávek. Další informace naleznete v tématu Použití více aktivních sad výsledků (MARS).

- background. Relace spouští úkol na pozadí, například detekci zablokování.

- rollback. V relaci probíhá návrat transakce.

- pending. Relace čeká, až se otevře pracovní vlákno.

- runnable. Úkol relace je v běžné frontě plánovače, zatímco se čeká na získání časového kvanta.

- spinloop. Úkolem této seance je čekat, až se spinlock uvolní.

- suspended. Relace čeká na dokončení události, například I/O.
loginame nchar(128) Přihlašovací jméno spojené s konkrétním procesem.
hostname nchar(128) Hostitelský nebo počítačový název pro každý proces.
blk char(5) Session ID pro proces blokování, pokud existuje. Jinak je tento sloupec .0

Když je transakce spojená s určeným ID relace zablokována osiřelou distribuovanou transakcí, tento sloupec vrátí a -2 pro blokující osiřelou transakci.
dbname nchar(128) Databáze používaná procesem.
cmd nchar(16) Database Engine příkaz (Transact-SQL příkaz, interní Database Engine proces a podobně) vykonává pro daný proces. V SQL Server 2019 (15.x) a novějších verzích je datový typ nchar(26).
request_id int ID pro požadavky běžící v konkrétní relaci.

Při paralelním zpracování se vytvářejí podvlákna pro konkrétní ID relace. Hlavní vlákno je označeno jako spid = <xxx> a ecid = 0. Ostatní podvlákna mají stejný spid = <xxx>, ale s .ecid > 0

Remarks

Blokovací proces, který může mít exkluzivní zámek, je takový, který drží zdroje, které jiný proces potřebuje.

Všem osiřelým distribuovaným transakcím je přiřazena hodnota ID relace .-2 Osiřelé distribuované transakce jsou distribuované transakce, které nejsou spojeny s žádným ID relace. Pro více informací viz Používání označených transakcí k obnově souvisejících databází konzistentně.

Dotazujte sloupec is_user_process , sys.dm_exec_sessions abyste oddělili systémové procesy od uživatelských procesů.

Permissions

Vyžaduje VIEW oprávnění SERVER STATE na serveru pro zobrazení všech vykonávaných relací na instanci SQL Server. Jinak uživatel vidí pouze aktuální relaci.

Examples

A. Seznam všech aktuálních procesů

Následující příklad používá sp_who bez parametrů k hlášení všech aktuálních uživatelů.

USE master;
GO

EXECUTE sp_who;
GO

B. Uveďte konkrétní proces uživatele

Následující příklad ukazuje, jak zobrazit informace o jednom aktuálním uživateli podle přihlašovacího jména.

USE master;
GO

EXECUTE sp_who 'janetl';
GO

C. Zobrazit všechny aktivní procesy

USE master;
GO

EXECUTE sp_who 'active';
GO

D. Zobrazit konkrétní proces identifikovaný ID relace

USE master;
GO

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