sp_who (Transact-SQL)

Fornece informações sobre usuários atuais, sessões e processos em uma instância do Microsoft Mecanismo de banco de dados do SQL Server. As informações podem ser filtradas para retornar somente 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.

Ícone de vínculo de tópicoConvenções de sintaxe Transact-SQL

Sintaxe

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

Argumentos

  • [ @loginame = ] 'login' | session ID | 'ACTIVE'
    É usado para filtrar o conjunto de resultados.

    login é sysname que identifica os processos que pertencem a um logon específico.

    session ID (SPID no SQL Server 2000 e anteriores) é um número de identificação de sessão que pertence à instância SQL Server. session ID é smallint.

    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 de código de retorno

0 (êxito) ou 1 (falha)

Conjuntos de resultados

sp_who retorna um conjunto de resultados com as informações a seguir.

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} representa 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 habilitador 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

char(5)

ID de sessão do processo de bloqueio, se houver. Caso contrário, essa coluna será zero.

Quando uma transação associada a uma ID de sessão especificada for bloqueada por uma transação distribuída órfã, essa coluna retornará um '-2' para o bloqueio da transação órfã.

dbname

nchar(128)

Banco de dados usado pelo processo.

cmd

nchar(16)

Comando Mecanismo de Banco de Dados (instrução Transact-SQL, processo Mecanismo de Banco de Dados interno e assim por diante) sendo executado para o processo.

request_id

int

ID de solicitações em execução em uma sessão específica.

No caso de processamento paralelo, são criados subthreads 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.

No SQL Server 2000 e posterior, todas as transações distribuídas órfãs recebem o valor de ID da sessão de '-2'. As 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 obter mais informações, consulte Usando transações marcadas (modelo de recuperação completa).

O SQL Server 2000 e posterior reserva os valores de ID de sessão de 1 a 50 para uso interno e os valores de sessão 51 ou superior representam sessões de usuário.

Permissões

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

Exemplos

A. Relacionando 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. Relacionando um 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. Exibindo todos os processos ativos

USE master;
GO
EXEC sp_who 'active';
GO

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

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