KILL (Transact-SQL)

Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada de SQL do AzureAzure Synapse AnalyticsPDW (Analytics Platform System)Ponto de extremidade de SQL no Microsoft FabricWarehouse no Microsoft Fabric

Encerra um processo de usuário baseado na ID da sessão ou na UOW (unidade de trabalho). Se a ID da sessão ou UOW especificada tiver muito trabalho a ser desfeito, a instrução KILL poderá demorar um pouco 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, internamente, interrompe as transações que estão 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

-- Syntax for SQL Server  
  
KILL { session ID [ WITH STATUSONLY ] | UOW [ WITH STATUSONLY | COMMIT | ROLLBACK ] }    

-- Syntax for Azure Synapse Analytics and Parallel Data Warehouse and Microsoft Fabric
  
KILL 'session_id'  
[;]   

Observação

Para exibir a sintaxe do Transact-SQL para o SQL Server 2014 (12.x) e versões anteriores, confira a Documentação das versões anteriores.

Argumentos

session ID
É a ID da sessão do processo a ser encerrado. session_id é um inteiro exclusivo (int) que é atribuído a cada conexão de usuário quando esta é estabelecida. 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 ID da UOW (Unidade de Trabalho) de transações distribuídas. UOW é um GUID que pode ser obtido na coluna request_owner_guid da exibição de gerenciamento dinâmico sys.dm_tran_locks. 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 são associadas a qualquer ID de sessão real, mas em vez disso, são associadas artificialmente à ID de sessão = '-2'. A ID da sessão facilita a identificação de transações não resolvidas por meio de consulta da coluna de ID da sessão em exibições de gerenciamento dinâmico sys.dm_tran_locks, sys.dm_exec_sessions, ou sys.dm_exec_requests.

WITH STATUSONLY
É usado para gerar um relatório de progresso para um UOW ou session_id especificados que estejam sendo revertidos devido a uma instrução KILL anterior. O KILL WITH STATUSONLY não termina ou reverte o UOW ou a ID de sessão. O comando exibe somente o progresso atual da reversão.

WITH COMMIT
É usado para encerrar uma transação distribuída com commit. Aplicável somente a transações distribuídas, especifique um UOW para usar essa opção. Confira transações distribuídas para obter mais informações.

WITH ROLLBACK
É usado para encerrar uma transação distribuída com reversão. Aplicável somente a transações distribuídas, especifique um UOW para usar essa opção. Confira transações distribuídas para obter mais informações.

Comentários

KILL normalmente é usado para encerrar um processo que está bloqueando outros processos importantes com bloqueios. KILL também pode ser usada para interromper um processo que está executando uma consulta que está usando 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 ativos, consulte a coluna session_id das exibições de gerenciamento dinâmico sys.dm_tran_locks, sys.dm_exec_sessions e sys.dm_exec_requests. Você também pode exibir a coluna SPID que é retornada pelo procedimento armazenado do sistema sp_who. Se uma reversão estiver em andamento para um SPID específico, a coluna cmd do conjunto de resultados sp_who desse 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 comando KILL 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 incertas, confira a seção "Protocolo 2PC" em Usar transações marcadas para recuperar bancos de dados relacionados de maneira consistente (modelo de recuperação completa).

Usando WITH STATUSONLY

KILL WITH STATUSONLY vai gerar um relatório se a ID de sessão ou a UOW for revertida devido a uma instrução KILL session ID|UOW anterior. 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 da ID de sessão ou UOW for concluída antes que a instrução KILL session ID|UOW WITH STATUSONLY seja executada, KILL session ID|UOW 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 pela repetição da mesma instrução KILL session ID|UOW sem usar a opção WITH STATUSONLY. No entanto, não é recomendável repetir a opção dessa maneira. Se você repetir a instrução KILL session ID, o novo processo poderá ser interrompido se a reversão for concluída e a ID de sessão for reatribuída a uma nova tarefa antes que a nova instrução KILL seja executada. Evite que o novo processo seja interrompido especificando WITH STATUSONLY.

Permissões

SQL Server: Exige a permissão ALTER ANY CONNECTION. ALTER ANY CONNECTION é incluída com associação nas funções de servidor fixas sysadmin ou processadmin.

Banco de Dados SQL: Exige a permissão KILL DATABASE CONNECTION. O logon da entidade de segurança no nível do servidor tem a permissão KILL DATABASE CONNECTION.

Microsoft Fabric: requer permissões de Administração.

Azure Synapse Analytics: requer permissões de administrador.

Exemplos

a. Usar KILL para interromper uma sessão

O exemplo a seguir mostra como interromper a ID de sessão 53.

KILL 53;  
GO  

B. Usando ID de sessão KILL WITH STATUSONLY para obter um relatório de andamento

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  

Este é 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 igual a D5499C66-E398-45CA-BF7E-DC9C194B48CF.

KILL 'D5499C66-E398-45CA-BF7E-DC9C194B48CF';  

Consulte Também

KILL STATS JOB (Transact-SQL)
KILL QUERY NOTIFICATION SUBSCRIPTION (Transact-SQL)
Funções internas (Transact-SQL)
SHUTDOWN (Transact-SQL)
@@SPID (Transact-SQL)
sys.dm_exec_requests (Transact-SQL)
sys.dm_exec_sessions (Transact-SQL)
sys.dm_tran_locks (Transact-SQL)
sp_lock (Transact-SQL)
sp_who (Transact-SQL)