KILL (Transact-SQL)

 

ESTE TÓPICO APLICA-SE A: simSQL Server (começando com o 2008)simBanco de Dados SQL do AzuresimAzure SQL Data Warehouse simParallel Data Warehouse

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 MS DTC (Microsoft Distributed Transaction Coordinator) estiver em uso.

Topic link icon Convenções de sintaxe Transact-SQL

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

-- Syntax for Azure SQL Data Warehouse and Parallel Data Warehouse  
  
KILL 'session_id'  
[;]   

ID da sessão
É a ID da sessão do processo a ser finalizado. ID de sessão é um inteiro exclusivo (int) 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.

Use KILL ID de sessão para finalizar transações distribuídas e não distribuídas regulares que estão associadas com uma ID de sessão especificada.

UOW

Aplica-se a: (SQL Server 2008 por meio de SQL Server 2016.

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 DM tran_locks. UOW também pode ser obtida do 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 andamento sobre especificada ID de sessão ou UOW que está sendo revertida devido a uma instrução KILL anterior. KILL WITH STATUSONLY não finaliza ou reverte o ID de sessão ou UOW; o comando somente exibe o progresso atual da reversão.

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 de ID de sessão para a 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 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" usar transações marcadas para recuperar bancos de dados relacionados consistentemente & #40. Total de 41; & modelo de recuperação.

KILL WITH STATUSONLY gera um relatório apenas se a ID de sessão ou UOW estiver sendo revertida atualmente devido a uma instrução KILL ID de sessão|UOW instrução. 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 UOW tiver sido concluída quando a instrução KILL ID de sessão|UOW COM statusonly for executada, ou se nenhuma ID de sessão ou UOW estiver sendo revertida, KILL ID de sessão|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."

O mesmo relatório de status pode ser obtido pela repetição da mesma instrução KILL ID de sessão|UOW sem usar a opção WITH STATUSONLY; no entanto, é recomendável não fazer isso. Repetindo um KILL ID de sessão instrução pode encerrar um processo novo se a reversão foi concluída e a ID de sessão foi reatribuída para uma nova tarefa para a nova instrução KILL seja executada. A especificação de WITH STATUSONLY impede que isso ocorra.

SQL Server: Requer 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: Requer a permissão KILL DATABASE CONNECTION. O logon de nível de servidor principal tem a CONEXÃO de banco de DADOS KILL.

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 da sessão = -2) com um UOW de D5499C66-E398-45CA-BF7E-DC9C194B48CF.

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

D. Usando KILL para finalizar uma sessão

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

KILL 'SID535';  

KILL STATS JOB & #40. O Transact-SQL e 41;
INSCRIÇÃO de NOTIFICAÇÃO de CONSULTA KILL & #40. O Transact-SQL e 41;
Funções internas e 40; O Transact-SQL e 41;
DESLIGAMENTO e 40; O Transact-SQL e 41;
@@SPID &40; O Transact-SQL e 41;
exec_requests & #40. O Transact-SQL e 41;
DM exec_sessions & #40. O Transact-SQL e 41;
DM tran_locks & #40. O Transact-SQL e 41;
sp_lock & #40. O Transact-SQL e 41;
SP_WHO & #40. O Transact-SQL e 41;

Contribuições da comunidade

ADICIONAR
Mostrar: