Partilhar via


KILL (Transact-SQL)

Finaliza 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 algum tempo para ser concluída, principalmente quando envolver a reversão de uma transação longa.

A instrução KILL pode ser usada para finalizar uma conexão normal, o que finaliza internamente as transações associadas à ID da 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ópico Convenções de sintaxe Transact-SQL

Sintaxe

KILL { session ID | UOW } [ WITH STATUSONLY ] 

Argumentos

  • session ID
    É a 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 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 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'. A ID da sessão facilita a identificação de transações órfãs 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
    Gera um relatório de progresso sobre uma session ID especificada 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:

  • 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 IDs de sessões ativas, você pode 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. Também é possível exibir a coluna SPID retornada pelo procedimento armazenado do sistema sp_who. Se uma reversão estiver em andamento para um SPID específico, a coluna cmd no conjunto de resultados de 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 em dúvida, consulte a seção "Protocolo 2PC" em Usar transações marcadas para recuperar bancos de dados relacionados consistentemente (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 da ID da sessão ou da UOW tiver sido concluída quando a instrução KILL session ID|UOW WITH STATUSONLY for executada ou se nenhuma ID da sessão ou UOW estiver sendo revertida, KILL session ID|UOW WITH STATUSONLY retornará o erro a seguir:

"Msg 6120, Level 16, State 1, Line 1"

"Status report cannot be obtained. Rollback operation for Process ID <session ID> is not in progress."

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, 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 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

--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';

Consulte também

Referência

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)