KILL (Transact-SQL)
Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure Azure Synapse Analytics Analytics Platform System (PDW) Ponto de extremidade de análise de SQL no Microsoft Fabric Warehouse no Microsoft Fabric Banco de Dados SQL no Microsoft Fabric
Encerra um processo de usuário baseado na ID da sessão ou na UOW (unidade de trabalho). Se a ID de sessão ou UOW especificada tiver muito trabalho a desfazer, a KILL
instrução poderá levar algum tempo para ser concluída. O processo levará mais tempo para ser concluído, especialmente quando envolver reversão de uma transação longa.
KILL
encerra uma conexão normal, que interrompe internamente as transações associadas à ID de sessão especificada. Às vezes, o Coordenador de Transações Distribuídas da Microsoft (MS DTC) pode estar em uso. Se o MS DTC estiver em uso, você também poderá usar a instrução para encerrar transações distribuídas órfãs e incertas.
Convenções de sintaxe de Transact-SQL
Sintaxe
Sintaxe do SQL Server, do Banco de Dados SQL do Azure ou de uma Instância Gerenciada de SQL do Azure:
KILL { session_id [ WITH STATUSONLY ] | UOW [ WITH STATUSONLY | COMMIT | ROLLBACK ] }
[ ; ]
Sintaxe para Azure Synapse Analytics, PDW (Analytics Platform System) e Microsoft Fabric:
KILL 'session_id'
[ ; ]
Argumentos
session_id
A ID da sessão do processo a ser encerrado. session_id
é um int exclusivo que é atribuído a cada conexão de usuário quando a conexão é feita. O valor do ID de sessão está vinculado à conexão pela duração da conexão. Quando a conexão for finalizada, o valor inteiro será liberado e poderá ser reatribuído a uma nova conexão.
A seguinte consulta pode ajudá-lo a identificar o session_id
que você deseja encerrar:
SELECT conn.session_id, host_name, program_name,
nt_domain, login_name, connect_time, last_request_end_time
FROM sys.dm_exec_sessions AS sess
JOIN sys.dm_exec_connections AS conn
ON sess.session_id = conn.session_id;
UOW
Identifica a UOW (ID de unidade de trabalho) de transações distribuídas. UOW é um GUID que pode ser obtido na request_owner_guid
coluna da sys.dm_tran_locks
exibição de gerenciamento dinâmico. UOW também pode ser obtido no log de erros ou por meio do monitor do MS DTC. Para obter mais informações sobre como monitorar transações distribuídas, consulte a documentação do MS DTC.
Use KILL <UOW>
para interromper transações distribuídas não resolvidas. Essas transações não estão associadas a nenhuma ID de sessão real, mas estão associadas artificialmente à ID de sessão = -2
. Essa ID de sessão facilita a identificação de transações não resolvidas consultando a coluna de ID da sessão em sys.dm_tran_locks
, sys.dm_exec_sessions
, ou sys.dm_exec_requests
exibições de gerenciamento dinâmico.
WITH STATUSONLY
Usado para gerar um relatório de progresso para uma UOW especificada ou session_id
que está sendo revertida devido a uma instrução anteriorKILL
. KILL WITH STATUSONLY
não encerra ou reverte a UOW ou a ID da sessão. O comando exibe somente o progresso atual da reversão.
WITH COMMIT
Usado para encerrar uma transação distribuída não resolvida com commit. Aplicável somente a transações distribuídas, especifique um UOW para usar essa opção. Para obter mais informações, consulte transações distribuídas.
WITH ROLLBACK
Usado para encerrar uma transação distribuída não resolvida com rollback. Aplicável somente a transações distribuídas, especifique um UOW para usar essa opção. Para obter mais informações, consulte transações distribuídas.
Comentários
KILL
é comumente usado para encerrar um processo que está bloqueando outros processos importantes com bloqueios. KILL
Também pode ser usado para interromper um processo que está executando uma consulta que está usando os recursos necessários do sistema. Os processos do sistema e os processos executando um procedimento armazenado estendido não podem ser encerrados.
Use KILL
com cuidado, especialmente quando processos críticos estiverem em execução. Você não pode encerrar o seu próprio processo. Assim como não deve encerrar os seguintes processos:
AWAITING COMMAND
CHECKPOINT SLEEP
LAZY WRITER
LOCK MONITOR
SIGNAL HANDLER
Use @@SPID
para exibir o valor do ID da sessão atual.
Para obter um relatório de valores de ID de sessão ativa, consulte a session_id
coluna das sys.dm_tran_locks
exibições de gerenciamento dinâmico e sys.dm_exec_sessions
sys.dm_exec_requests
, . Você também pode exibir a SPID
coluna que o procedimento armazenado do sp_who
sistema retorna. Se uma reversão estiver em andamento para um SPID específico, a cmd
coluna no sp_who
conjunto de resultados para esse SPID indicará KILLED/ROLLBACK
.
Quando uma conexão específica tiver um bloqueio em um recurso de banco de dados e bloquear o andamento de outra conexão, a ID da sessão da conexão responsável pelo bloqueio será mostrada na coluna blocking_session_id
de sys.dm_exec_requests
ou na coluna blk
retornada por sp_who
.
O KILL
comando pode ser usado para resolver transações distribuídas em dúvida. Essas transações são do tipo distribuídas não resolvidas que ocorrem devido a reinícios não planejados do servidor de banco de dados ou do coordenador do MS DTC. Para obter mais informações sobre transações em dúvida, consulte a seção "Confirmação em duas fases" em Usar transações marcadas para recuperar bancos de dados relacionados de forma consistente.
Use WITH STATUSONLY
KILL WITH STATUSONLY
gera um relatório se o ID da sessão ou UOW for revertido devido a uma instrução or KILL <UOW>
anteriorKILL <session ID>
. O relatório de progresso indica a quantidade concluída da reversão (em porcentagem) e o período de tempo restante estimado (em segundos). O relatório indica isso da seguinte forma:
Spid|UOW <xxx>: Transaction rollback in progress. Estimated rollback completion: <yy>% Estimated time left: <zz> seconds
Se a reversão do ID da sessão ou UOW terminar antes da execução da KILL <session ID> WITH STATUSONLY
instrução or KILL <UOW> WITH STATUSONLY
, KILL ... WITH STATUSONLY
retornará o seguinte erro:
"Msg 6120, Level 16, State 1, Line 1"
"Status report cannot be obtained. Rollback operation for Process ID <session ID> is not in progress."
Esse erro também ocorrerá se nenhuma ID de sessão ou UOW estiver sendo revertida.
O mesmo relatório de status pode ser obtido repetindo a mesma KILL
instrução sem usar a WITH STATUSONLY
opção. No entanto, não é recomendável repetir a opção dessa maneira. Se você repetir uma KILL <session_id>
instrução, o novo processo poderá ser interrompido se a reversão for concluída e a ID da sessão for reatribuída a uma nova tarefa antes da execução da nova KILL
instrução. Impeça que o novo processo pare especificando WITH STATUSONLY
.
Permissões
SQL Server: requer a ALTER ANY CONNECTION
permissão. ALTER ANY CONNECTION
está incluído na associação nas funções de servidor fixas sysadmin ou processadmin.
Banco de Dados SQL: requer a KILL DATABASE CONNECTION
permissão. O logon principal no nível do servidor tem a KILL DATABASE CONNECTION
permissão.
Microsoft Fabric: requer permissões de Administração.
Azure Synapse Analytics: requer permissões de administrador.
Exemplos
R. Use KILL para interromper uma sessão
O exemplo a seguir mostra como interromper a ID de sessão 53
.
KILL 53;
GO
B. Use o ID da sessão KILL com STATUSONLY para obter um relatório de progresso
O exemplo a seguir gera um status do processo de reversão para o ID de sessão específico.
KILL 54;
KILL 54 WITH STATUSONLY;
GO
Veja a seguir o conjunto de resultados.
spid 54: Transaction rollback in progress. Estimated rollback completion: 80% Estimated time left: 10 seconds.
C. Usar KILL para interromper uma transação distribuída órfã
O exemplo a seguir mostra como interromper uma transação distribuída órfã (ID de sessão = -2
) com uma UOW de D5499C66-E398-45CA-BF7E-DC9C194B48CF
.
KILL 'D5499C66-E398-45CA-BF7E-DC9C194B48CF';