sp_who (Transact-SQL)

Aplica-se a:SQL Server

Fornece informações sobre usuários, sessões e processos atuais em uma instância do Mecanismo de Banco de Dados do SQL Server. As informações podem ser filtradas para retornar apenas os processos que não estão ociosos, que pertencem a um usuário específico ou que pertencem a uma sessão específica.

Convenções de sintaxe de Transact-SQL

Sintaxe

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

Argumentos

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

Usado para filtrar o conjunto de resultados.

  • login é sysname que identifica processos pertencentes a um login específico.

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

  • ACTIVE exclui sessões que estão aguardando o próximo comando do usuário.

Se nenhum valor for fornecido, o procedimento relatará todas as sessões que pertencem à instância.

Valores do código de retorno

0 (sucesso) ou 1 (falha).

Conjunto de resultados

sp_who Retorna um conjunto de resultados com as seguintes informações.

Coluna Tipo de dados Descrição
spid smallint ID da sessão.
ecid smallint ID do contexto de execução de determinado thread associado a uma ID de sessão específica.

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

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

- running. A sessão está executando um ou mais lotes. Quando são habilitados MARS (Vários Conjuntos de Resultados Ativos), uma sessão pode executar vários lotes. Para obter mais informações, consulte Usando MARS (vários conjuntos de resultados ativos).

- background. A sessão está executando uma tarefa em segundo plano, como detecção de deadlock.

- rollback. A sessão tem uma reversão de transação em processo.

- pending. A sessão está aguardando que um thread de trabalho seja disponibilizado.

- runnable. A tarefa da sessão está na fila executável de um agendador enquanto aguarda para obter um quantum de hora.

- spinloop. A tarefa da sessão está aguardando que um spinlock seja liberado.

- suspended. A sessão está aguardando que um evento, como E/S, seja concluído.
loginame nchar(128) Nome de logon associado a determinado processo.
hostname nchar(128) Nome do host ou computador de cada processo.
blk cargê (5) ID de sessão do processo de bloqueio, se houver. Caso contrário, esta coluna será 0.

Quando uma transação associada a um ID de sessão especificado é bloqueada por uma transação distribuída órfã, essa coluna retorna um -2 para a transação órfã de bloqueio.
dbname nchar(128) Banco de dados usado pelo processo.
cmd nchar(16) Comando do Mecanismo de Banco de Dados (instrução Transact-SQL, processo interno do Mecanismo de Banco de Dados e assim por diante) em execução para o processo. No SQL Server 2019 (15.x) e versões posteriores, o tipo de dados é nchar(26).
request_id int ID de solicitações em execução em uma sessão específica.

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

Comentários

Um processo de bloqueio, que pode ter um bloqueio exclusivo, é um que está retendo recursos que outro processo precisa.

A todas as transações distribuídas órfãs é atribuído o valor de ID de sessão de -2. As transações distribuídas órfãs são transações distribuídas que não estão associadas a nenhuma ID de sessão. Para obter mais informações, veja Usar transações marcadas para recuperar bancos de dados relacionados de forma consistente (Modelo de recuperação completa).

Consulte a coluna de para separar os is_user_process processos do sistema dos processos do sys.dm_exec_sessions usuário.

Permissões

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

Exemplos

R. Listar todos os processos atuais

O exemplo a seguir usa sp_who sem parâmetros para relatar todos os usuários atuais.

USE master;
GO
EXEC sp_who;
GO

B. Listar o processo de um usuário específico

O exemplo a seguir mostra como exibir informações sobre um único usuário atual através do nome de logon.

USE master;
GO
EXEC sp_who 'janetl';
GO

C. Exibir todos os processos ativos

USE master;
GO
EXEC sp_who 'active';
GO

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

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