sp_who (Transact-SQL)
Aplica-se: 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 é o nome do sistema que identifica os processos pertencentes a um logon específico.
session_id é um número de identificação de sessão pertencente à 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 do código de retorno
0
(sucesso) ou 1
(falha).
Conjunto 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 } 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 |
char(5) | ID de sessão do processo de bloqueio, se houver. Caso contrário, esta coluna será 0 .Quando uma transação associada a uma ID de sessão especificada é 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, os 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, é aquele que contém recursos de que outro processo precisa.
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 nenhuma ID de sessão. Para obter mais informações, consulte Usar transações marcadas para recuperar bancos de dados relacionados de forma consistente.
Consulte a coluna de para separar os is_user_process
processos do sys.dm_exec_sessions
sistema dos processos do 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 um ID de sessão
USE master;
GO
EXEC sp_who '10' --specifies the process_id;
GO