sys.sp_who (Transact-SQL)

Aplica-se a: SQL Server

Fornece informações sobre utilizadores atuais, sessões e processos numa instância do Mecanismo de Banco de Dados do SQL Server. A informação pode ser filtrada para devolver apenas aqueles processos que não estão inativos, que pertencem a um utilizador específico ou que pertencem a uma sessão específica.

Transact-SQL convenções de sintaxe

Syntax

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

Arguments

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

Usado para filtrar o conjunto de resultados.

  • Login é um nome de sistema que identifica processos pertencentes a um determinado login.

  • session_id é um número de identificação de sessão pertencente à instância SQL Server. session_id é pequeno.

  • ACTIVE exclui sessões que estão à espera do próximo comando do utilizador.

Se não for fornecido valor, o procedimento reporta todas as sessões pertencentes à instância.

Valores de código de retorno

0 (sucesso) ou 1 (fracasso).

Conjunto de resultados

sp_who devolve um conjunto de resultados com a seguinte informação.

Coluna Tipo de dados Description
spid smallint ID da Sessão.
ecid smallint ID de contexto de execução de um determinado thread associado a um ID de sessão específico.

ECID = { 0, 1, 2, 3, ... n }, onde 0 representa sempre o fio principal ou pai, e { 1, 2, 3, ... n } representam os subthreads.
status NCAR (30) Estado do processo. Os valores possíveis são:

- dormant. O SQL Server está a reiniciar a sessão.

- running. A sessão está a executar um ou mais lotes. Quando o Multiple Active Result Sets (MARS) está ativado, uma sessão pode executar vários lotes. Para obter mais informações, consulte Usando vários conjuntos de resultados ativos (MARS).

- background. A sessão está a executar uma tarefa em segundo plano, como a deteção de deadlocks.

- rollback. A sessão tem uma reversão de transações em andamento.

- pending. A sessão está à espera que um tópico de trabalho fique disponível.

- runnable. A tarefa da sessão está na fila executável de um agendador enquanto se espera obter um quantum de tempo.

- spinloop. A tarefa da sessão é esperar que um spinlock fique livre.

- suspended. A sessão está à espera que um evento, como I/O, seja concluído.
loginame nchar(128) Nome de login associado ao processo específico.
hostname nchar(128) Nome do anfitrião ou computador para cada processo.
blk char(5) ID de sessão para o processo de bloqueio, se existir. Caso contrário, esta coluna é 0.

Quando uma transação associada a um ID de sessão especificado é bloqueada por uma transação distribuída órfã, esta coluna devolve a -2 para a transação órfã bloqueadora.
dbname nchar(128) Base de dados utilizada pelo processo.
cmd NCAR (16) Database Engine comando (Transact-SQL instrução, processo interno Database Engine, e assim sucessivamente) a executar o processo. No SQL Server 2019 (15.x) e versões posteriores, o tipo de dado é nchar(26).
request_id int ID para pedidos a correr numa sessão específica.

Com processamento paralelo, são criados subthreads para o ID específico da sessão. O fio principal é indicado como spid = <xxx> e ecid = 0. Os outros subthreads têm o mesmo spid = <xxx>, mas com ecid > 0.

Remarks

Um processo de bloqueio, que pode ter um bloqueio exclusivo, é aquele que retém recursos que outro processo necessita.

Todas as transações distribuídas órfãs recebem o valor de ID de sessão de -2. Transações distribuídas órfãs são transações distribuídas que não estão associadas a qualquer ID de sessão. Para mais informações, consulte Usar Transações Marcadas para Recuperar Bases de Dados Relacionadas de forma consistente.

Consulte a is_user_process coluna de sys.dm_exec_sessions para separar os processos do sistema dos processos do utilizador.

Permissions

Requer VIEW permissão SERVER STATE no servidor para ver todas as sessões em execução na instância do SQL Server. Caso contrário, o utilizador vê apenas a sessão atual.

Examples

A. Liste todos os processos atuais

O exemplo seguinte utiliza sp_who sem parâmetros para reportar todos os utilizadores atuais.

USE master;
GO

EXECUTE sp_who;
GO

B. Liste o processo de um utilizador específico

O exemplo seguinte mostra como visualizar informações sobre um único utilizador atual por nome de login.

USE master;
GO

EXECUTE sp_who 'janetl';
GO

C. Mostrar todos os processos ativos

USE master;
GO

EXECUTE sp_who 'active';
GO

D. Mostrar um processo específico identificado por um ID de sessão

USE master;
GO

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