Partilhar via


KILL (Transact-SQL)

Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure Azure Synapse Analytics PDW (Analytics Platform System) Ponto de extremidade de análise do SQL Warehouse 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_locksexibições de gerenciamento dinâmico e sys.dm_exec_sessionssys.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 STATUSONLYgera 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 CONNECTIONestá 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';