sp_who (Transact-SQL)
Fornece informações sobre usuários atuais, sessões e processos em uma instância do MicrosoftMecanismo 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.
Convençõ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 é um número de identificação de sessão que pertence à instância do 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.
Column |
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á reiniciando 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 |
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.
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 Usar transações marcadas para recuperar bancos de dados relacionados consistentemente (modelo de recuperação completa).
Consulte a coluna is_user_process de sys.dm_exec_sessions para separar processos de sistema de processos 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