Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a:SQL Server
Base de Dados SQL do Azure
Instância Gerida do Azure SQL
Azure Synapse Analytics
Sistema de Plataforma de Análise (PDW)
Ponto de Extremidade de Análise SQL no Microsoft Fabric
Armazém no Microsoft Fabric
Base de Dados SQL no Microsoft Fabric
Termina um processo de usuário baseado na ID da sessão ou unidade de trabalho (UOW). Se o ID de sessão especificado ou UOW tiver muito trabalho para desfazer, a KILL instrução pode levar algum tempo para ser concluída. O processo leva mais tempo para ser concluído, especialmente quando envolve a reversão de uma transação longa.
KILL encerra uma conexão normal, que interrompe internamente as transações associadas ao ID de sessão especificado. Às vezes, o Microsoft Distributed Transaction Coordinator (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 em dúvida.
Transact-SQL convenções de sintaxe
Syntax
Sintaxe do SQL Server, Banco de Dados SQL do Azure e Instância Gerenciada SQL do Azure:
KILL { session_id [ WITH STATUSONLY ] | UOW [ WITH STATUSONLY | COMMIT | ROLLBACK ] }
[ ; ]
Sintaxe do Azure Synapse Analytics, Analytics Platform System (PDW) e Microsoft Fabric:
KILL 'session_id'
[ ; ]
Arguments
session_id
O ID da sessão do processo a terminar.
session_id é um int exclusivo que é atribuído a cada conexão de usuário quando a conexão é feita. O valor de ID de sessão é vinculado à conexão durante a duração da conexão. Quando a conexão termina, o valor inteiro é liberado e pode ser reatribuído a uma nova conexão.
A consulta a seguir pode ajudá-lo a identificar o session_id que você deseja matar:
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 unidade de ID de trabalho (UOW) de transações distribuídas.
UOW é um GUID que pode ser obtido a request_owner_guid partir da coluna da sys.dm_tran_locks visualização de gerenciamento dinâmico.
UOW também pode ser obtido a partir do log de erros ou através do monitor 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 nenhum ID de sessão real, mas são associadas artificialmente ao ID de sessão = -2. Esse ID de sessão facilita a identificação de transações não resolvidas consultando a coluna ID da sessão em sys.dm_tran_locks, sys.dm_exec_sessionsou sys.dm_exec_requests exibições de gerenciamento dinâmico.
COM APENAS ESTATUTO
Usado para gerar um relatório de progresso para um UOW especificado ou session_id que está sendo revertido devido a uma instrução anterior KILL .
KILL WITH STATUSONLY não encerra nem reverte o UOW ou o ID da sessão. O comando exibe apenas o progresso atual da reversão.
COM COMMIT
Usado para matar uma transação distribuída não resolvida com commit. Aplicável apenas a transações distribuídas, você deve especificar um UOW para usar essa opção. Para obter mais informações, consulte Transações distribuídas.
COM ROLLBACK
Usado para matar uma transação distribuída não resolvida com reversão. Aplicável apenas a transações distribuídas, você deve especificar um UOW para usar essa opção. Para obter mais informações, consulte Transações distribuídas.
Remarks
KILL é comumente usado para encerrar um processo que está bloqueando outros processos importantes com bloqueios.
KILL também pode ser usado para parar um processo que está executando uma consulta que está usando os recursos necessários do sistema. Os processos do sistema e os processos que executam um procedimento armazenado estendido não podem ser encerrados.
Use KILL com cuidado, especialmente quando processos críticos estão em execução. Você não pode matar seu próprio processo. Você também não deve matar os seguintes processos:
AWAITING COMMANDCHECKPOINT SLEEPLAZY WRITERLOCK MONITORSIGNAL HANDLER
Use @@SPID para exibir o valor de ID de sessão (SPID) para a sessão atual.
Para obter um relatório de valores de ID de sessão ativos, consulte a session_id coluna das sys.dm_tran_locksexibições , sys.dm_exec_sessionse sys.dm_exec_requests gerenciamento dinâmico. 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 uma ID de sessão específica, a coluna no conjunto de cmd resultados para essa ID de sessão indicará .sp_whoKILLED/ROLLBACK
Quando uma conexão específica tem um bloqueio em um recurso de banco de dados e bloqueia o progresso de outra conexão, a ID de sessão da conexão de bloqueio aparece na blocking_session_id coluna de ou na sys.dm_exec_requests coluna retornada blk por sp_who.
O KILL comando pode ser usado para resolver transações distribuídas em dúvida. Essas transações são transações distribuídas não resolvidas que ocorrem devido a reinicializações não planejadas 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 "Two-Phase Commit" em Usar transações marcadas para recuperar bancos de dados relacionados de forma consistente.
Uso COM STATUSONLY
KILL WITH STATUSONLYgera um relatório se o ID da sessão ou UOW for revertido devido a uma instrução ou KILL <session ID> anteriorKILL <UOW>. O relatório de progresso indica a quantidade de reversão concluída (em percentagem) e o período estimado de tempo restante (em segundos). O relatório afirma-o 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 de sessão ou UOW terminar antes da KILL <session ID> WITH STATUSONLY instrução or KILL <UOW> WITH STATUSONLY ser executada, 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."
Este erro também ocorre se nenhum ID de sessão ou UOW estiver sendo revertido.
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 recomendamos repetir a opção desta forma. Se você repetir uma KILL <session_id> instrução, o novo processo poderá parar se a reversão for concluída e a ID da sessão for reatribuída a uma nova tarefa antes que a nova KILL instrução seja executada. Impeça que o novo processo seja interrompido especificando WITH STATUSONLY.
Permissions
SQL Server: Requer a ALTER ANY CONNECTION permissão.
ALTER ANY CONNECTION está incluído com associação nas funções de servidor fixas sysadmin ou processadmin .
Banco de dados SQL: Requer a KILL DATABASE CONNECTION permissão. O login principal no nível do servidor tem a KILL DATABASE CONNECTION permissão.
Microsoft Fabric Data Warehouse: Requer a permissão de item Monitor ou associação à função Administradores de Espaço de Trabalho.
Banco de dados SQL no Microsoft Fabric: Requer a KILL DATABASE CONNECTION permissão no mecanismo de banco de dados SQL ou a permissão Gravar item no espaço de trabalho Malha.
Azure Synapse Analytics: Requer permissões de administrador.
Examples
A. Usar KILL para interromper uma sessão
O exemplo a seguir mostra como parar a ID 53da sessão.
KILL 53;
GO
B. Use KILL session ID WITH STATUSONLY para obter um relatório de progresso
O exemplo a seguir gera um status do processo de reversão para a ID de sessão específica.
KILL 54;
KILL 54 WITH STATUSONLY;
GO
Aqui está o conjunto de resultados.
spid 54: Transaction rollback in progress. Estimated rollback completion: 80% Estimated time left: 10 seconds.
C. Use KILL para interromper uma transação distribuída órfã
O exemplo a seguir mostra como parar uma transação distribuída órfã (ID de sessão = -2) com um UOW de D5499C66-E398-45CA-BF7E-DC9C194B48CF.
KILL 'D5499C66-E398-45CA-BF7E-DC9C194B48CF';