sp_who (Transact-SQL)

Si applica a: sìSQL Server (tutte le versioni supportate)

Fornisce informazioni su utenti, sessioni e processi correnti in un'istanza di Microsoft Motore di database di SQL Server . È possibile filtrare tali informazioni in modo da ottenere solo i processi che non sono inattivi, che appartengono a un utente specifico o che sono associati a una determinata sessione.

Icona di collegamento a un argomento Convenzioni della sintassi Transact-SQL

Sintassi

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

Argomenti

[ @loginame = ] 'login' | session ID | 'ACTIVE' Viene usato per filtrare il set di risultati.

login è sysname che identifica i processi appartenenti a un account di accesso specifico.

l'ID sessione è un numero di identificazione della sessione appartenente SQL Server all'istanza. l'ID sessione è smallint.

ACTIVE esclude le sessioni in attesa del comando successivo dall'utente.

Se non si specifica alcun valore, vengono restituite tutte le sessioni appartenenti all'istanza.

Valori del codice restituito

0 (operazione completata) o 1 (operazione non riuscita)

Set di risultati

sp_who restituisce un set di risultati con le informazioni seguenti.

Colonna Tipo di dati Descrizione
spid smallint ID di sessione.
Ecid smallint ID del contesto di esecuzione di un determinato thread associato a un ID di sessione specifico.

ECID = {0, 1, 2, 3, ... n}, dove 0 rappresenta sempre il thread principale o padre e {1, 2, 3, ... n} rappresentano i sottothread.
Stato nchar(30) Stato del processo. I valori possibili sono:

inattiva. SQL Server sta reimpostando la sessione.

esecuzione di. Nella sessione vengono eseguiti uno o più batch. Se si abilita la funzionalità MARS (Multiple Active Result Sets), una sessione può eseguire più batch. Per altre informazioni vedere Uso di MARS (Multiple Active Result Set).

background. Nella sessione viene eseguita un'attività in background, ad esempio il rilevamento dei deadlock.

rollback . Nella sessione è in corso il rollback di una transazione.

in sospeso. La sessione è in attesa che un thread di lavoro diventi disponibile.

runnable. L'attività della sessione si trova nella coda eseguibile di un'utilità di pianificazione in attesa di un quantum temporale.

spinloop. L'attività della sessione è in attesa che venga liberato uno spinlock.

sospeso. La sessione è in attesa del completamento di un evento, ad esempio di I/O.
loginame nchar(128) Nome dell'account di accesso associato a un particolare processo.
hostname nchar(128) Nome host o di computer per ogni processo.
blk char(5) ID di sessione del processo di blocco, se esistente. In caso contrario, il valore di questa colonna è zero.

Quando una transazione associata a un ID di sessione specificato viene bloccata da una transazione distribuita orfana, questa colonna restituirà il valore -2 per tale transazione.
Dbname nchar(128) Database utilizzato dal processo.
cmd nchar(16) Comando Motore di database (istruzione Transact-SQL, processo interno Motore di database e così via) in esecuzione per il processo. In SQL Server 2019 il tipo di dati è stato modificato in nchar(26).
request_id int ID per le richieste in esecuzione in una sessione specifica.

In caso di elaborazione parallela, vengono creati thread secondari per l'ID di sessione specifico. Il thread principale è indicato da spid = <xxx> e ecid =0. Gli altri sottothread hanno lo stesso spid = <xxx> , ma con ecid > 0.

Commenti

Con il termine processo di blocco si indica un processo che mantiene bloccate, potenzialmente con un blocco esclusivo, risorse necessarie per un altro processo.

A tutte le transazioni distribuite orfane viene assegnato il valore di ID di sessione -2. Le transazioni distribuite orfane sono transazioni distribuite non associate a un ID di sessione. Per altre informazioni, vedere Usare transazioni contrassegnate per recuperare coerentemente i database correlati (modello di recupero con registrazione completa).

Eseguire una is_user_process colonna di sys.dm_exec_sessions per separare i processi di sistema dai processi utente.

Autorizzazioni

È richiesta l'autorizzazione VIEW SERVER STATE per il server per visualizzare tutte le sessioni in esecuzione nell'istanza di SQL Server. In caso contrario, sarà possibile visualizzare solo la sessione corrente.

Esempi

R. Elenco di tutti i processi correnti

Nell'esempio seguente la stored procedure sp_who viene eseguita senza parametri in modo che vengano restituiti tutti gli utenti correnti.

USE master;  
GO  
EXEC sp_who;  
GO  

B. Visualizzazione del processo di un utente specifico

Nell'esempio seguente viene illustrato come visualizzare le informazioni su un singolo utente corrente in base al nome dell'account di accesso.

USE master;  
GO  
EXEC sp_who 'janetl';  
GO  

C. Visualizzazione di tutti i processi attivi

USE master;  
GO  
EXEC sp_who 'active';  
GO  

D. Visualizzazione di un processo specifico identificato da un ID di sessione

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

Vedere anche

sp_lock (Transact-SQL)
sys.sysprocesses (Transact-SQL)
Stored procedure di sistema (Transact-SQL)