sp_who (Transact-SQL)
Restituisce informazioni sugli utenti, le sessioni e i processi correnti in un'istanza del Motore di database di SQL Server Microsoft. È 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.
Convenzioni della sintassi Transact-SQL
Sintassi
sp_who [ [ @loginame = ] 'login' | session ID | 'ACTIVE' ]
Argomenti
[ @loginame = ] 'login' | session ID | 'ACTIVE'
Viene utilizzato per filtrare il set di risultati.login rappresenta il sysname che identifica i processi appartenenti a un determinato account di accesso.
session ID è un numero identificativo di sessione appartenente all'istanza di SQL Server. session ID è di tipo smallint.
ACTIVE consente di escludere le sessioni in attesa del successivo comando dell'utente.
Se non si specifica alcun valore, vengono restituite tutte le sessioni appartenenti all'istanza.
Valori restituiti
0 (esito positivo) o 1 (esito negativo)
Set di risultati
Il set di risultati restituito dalla stored procedure sp_who include 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} rappresenta i thread secondari. |
status |
nchar(30) |
Stato del processo. I valori possibili sono: dormant. SQL Server sta reimpostando la sessione. running. Nella sessione vengono eseguiti uno o più batch. Se si abilita MARS (Multiple Active Result Sets), la sessione può eseguire più batch. Per ulteriori informazioni, vedere Utilizzo 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. pending. 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. suspended. 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. |
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. Agli altri thread secondari è associato lo stesso valore spid = <xxx> ma con ecid > 0.
Osservazioni
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 ulteriori informazioni, vedere Utilizzare Transazioni contrassegnate per recuperare coerentemente i database correlati (Modello di recupero con registrazione completa).
Eseguire una query sulla colonna is_user_process 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
A.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