Partilhar via


KILL (Transact-SQL)

Finaliza um processo de usuário que tem base no ID da sessão (SPID no SQL Server 2000 e anterior) ou unidade de trabalho (UOW). Se o ID de sessão ou UOW especificado tiver muito trabalho a ser desfeito, a instrução KILL poderá demorar algum tempo para ser concluída, especialmente quando envolver a reversão de uma transação longa.

No SQL Server 2000 e versões posteriores, KILL pode ser usado para terminar uma conexão normal, o que encerra internamente as transações associadas à identificação de sessão especificada. A instrução também pode ser usada para finalizar transações distribuídas órfãs e incertas quando o Microsoft Distributed Transaction Coordinator (MS DTC) estiver em uso.

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

Sintaxe

KILL { session ID | UOW } [ WITH STATUSONLY ] 

Argumentos

  • session ID
    É o ID da sessão do processo a ser finalizado. 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.

    Use KILL session ID para finalizar transações comuns distribuídas e não distribuídas que estão associadas a um ID de sessão especificado.

  • UOW
    Identifica a UOW (ID de 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. A UOW também pode ser obtida 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 finalizar transações distribuídas órfãs. Essas transações não são associadas a nenhum ID de sessão real, mas em vez disso, são associadas artificialmente ao ID de sessão = '-2'. Esse ID de sessão facilita a identificação de transações órfãs pela consulta da coluna de ID de sessão nas exibições de gerenciamento dinâmico sys.dm_tran_locks, sys.dm_exec_sessions ou sys.dm_exec_requests.

  • WITH STATUSONLY
    Gera um relatório de progresso sobre um session ID especificado ou uma UOW que está sendo revertida devido a uma instrução KILL anterior. KILL WITH STATUSONLY não finaliza ou reverte o session ID ou a UOW; o comando somente exibe o andamento atual da reversão.

Comentários

KILL normalmente é usado para finalizar um processo que esteja bloqueando outros processos importantes com bloqueios ou um processo que esteja executando uma consulta que use recursos necessários do sistema. Os processos do sistema e os processos que estejam executando um procedimento armazenado estendido não podem ser finalizados.

Use KILL com muito cuidado, especialmente quando processos críticos estiverem em execução. Você não pode eliminar seu próprio processo. Outros processos que você não deve eliminar incluem o seguinte:

  • 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 ativas, é possível consultar 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 de sistema sp_who. Se uma reversão estiver em andamento para um SPID específico, a coluna cmd do conjunto de resultados sp_who 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, o ID de sessão da conexão responsável pelo bloqueio aparecerá 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 em dúvida distribuídas. 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 "Protocolo 2PC" em Usando transações marcadas (modelo de recuperação completa).

Usando WITH STATUSONLY

KILL WITH STATUSONLY gera um relatório apenas se o ID de sessão ou a UOW estiver sendo revertido atualmente 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), no seguinte formato:

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 da UOW foi concluída quando a instrução KILL session ID|UOW WITH STATUSONLY for executada ou se nenhum ID de sessão ou UOW estiver sendo revertido, KILL session ID|UOW WITH STATUSONLY retornará o seguinte erro:

“Msg 6120, Nível 16, Estado 1, Linha 1"

"O relatório de status não pode ser obtido. A operação de reversão para o ID de processo <ID de sessão> não está em andamento."

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; entretanto, isso não é recomendável. A repetição de uma instrução KILL session ID pode finalizar um novo processo se a reversão foi concluída e o ID de sessão foi reatribuído para uma nova tarefa antes que a nova instrução KILL seja executada. A especificação de WITH STATUSONLY impede que isso ocorra.

Permissões

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

Exemplos

A. Usando KILL para finalizar uma sessão

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

KILL 53;
GO

B. Usando KILL session ID 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

--This is the progress report.
spid 54: Transaction rollback in progress. Estimated rollback completion: 80% Estimated time left: 10 seconds.

C. Usando KILL para finalizar uma transação distribuída órfã

O exemplo a seguir mostra como finalizar 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';