sp_who (Transact-SQL)

Restituisce informazioni sugli utenti, le sessioni e i processi correnti in un'istanza del Motore di database di SQL ServerMicrosoft. È 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 argomentoConvenzioni 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 (SPID in SQL Server 2000 e versioni precedenti) è un numero di identificazione della sessione relativo 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 attiva 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 è rappresentato 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.

In SQL Server 2000 e versioni successive 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 Utilizzo delle transazioni contrassegnate (modello di recupero con registrazione completa).

In SQL Server 2000 e versioni successive i valori di ID di sessione compresi tra 1 e 50 sono riservati per uso interno, mentre i valori a partire da 51 rappresentano le sessioni 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