Como matar / parar uma consulta SQL longa imediatamente?

93

Estou usando o SQL server 2008 e seu estúdio de gerenciamento. Executei uma consulta que produz muitas linhas. Tentei cancelar com o botão vermelho de cancelamento, mas ele não parou nos últimos 10 minutos. Geralmente, para em 3 minutos.

Qual poderia ser o motivo e como faço para interromper imediatamente?

sequel.learner
fonte
você verificou se algum aplicativo está mantendo esta consulta ??
user1102001
1
pare e reinicie seus serviços sql novamente ..
user1102001
Enfrentei este cenário porque até mesmo eu estava executando tudo em sql e é meu desejo editar meu perfil ou não ...
user1102001
@ user1102001 - não o forçando a fazer nada. Eu disse que posso e não devo :)
sequel.learner

Respostas:

66

Qual poderia ser o motivo

Um cancelamento de consulta é imediato, desde que sua atenção possa chegar ao servidor e ser processada. Uma consulta deve estar em um estado cancelável, o que quase sempre é verdadeiro, exceto se você fizer certas operações, como chamar um serviço da web de SQLCLR. Se sua atenção não puder alcançar o servidor, geralmente é devido à sobrecarga do planejador .

Mas se sua consulta fizer parte de uma transação que deve ser revertida, a reversão não poderá ser interrompida. Se levar 10 minutos, serão necessários 10 minutos e não há nada que você possa fazer a respeito. Mesmo reiniciar o servidor não ajudará, apenas tornará a inicialização mais longa, pois a recuperação deve terminar a reversão.

Para responder qual motivo específico se aplica ao seu caso, você precisará investigar você mesmo.

Remus Rusanu
fonte
Observe que o SSMS mostra a consulta como 'cancelada' (em oposição a 'tentativa de cancelar') somente após a resposta de atenção ser recebida, o que implica drenar todos os resultados intermediários no canal de comunicação primeiro (por exemplo, todos os resultados no TCP / IP buffers enviados / recebidos e todos os buffers na memória).
Remus Rusanu
1
Eu gostaria que dissesse 'rolando para trás'
Simon_Weaver
@RemusRusanu - E se o tempo estimado de reversão for mais de 20.000 horas? Prazer em restaurar de um backup. dba.stackexchange.com/questions/222145/…
youcantryreachingme
108
sp_who2 'active'

Verifique os valores em CPUTime e DiskIO . Observe o SPID do processo com grande valor comparativamente.

kill {SPID value}
Mudassir Hasan
fonte
Estou usando o Microsoft SQL Server 2008 R2, tentei descobrir qual é o SPID da consulta que está sendo executada e está suspensa, e descobri que há muitas instâncias do mesmo SELECT SQL com o mesmo SPID. Quando tento executar o comando KILL 114 - aqui 114 é o valor SPID da minha consulta suspensa. Recebo o erro mostrado abaixo: Por favor, guie. Msg 102, nível 15, estado 1, linha 2 Sintaxe incorreta próxima a '114'.
Código Buster
40

Primeiro execute o comando abaixo:

sp_who2

Depois disso, execute o comando abaixo com SPID, que você obteve do comando acima:

KILL {SPID value}
user1608817
fonte
22

Esta é uma resposta meio boba, mas funciona de forma confiável, pelo menos no meu caso: No management studio, quando o "Cancel Executing Query" não interrompe a consulta, eu apenas clico para fechar o documento sql atual. ele me pergunta se eu quero cancelar a consulta, eu digo que sim, e eis que em alguns segundos ele para de executar. Depois disso, ele me pergunta se eu quero salvar o documento antes de fechar. Nesse ponto, posso clicar em Cancelar para manter o documento aberto e continuar trabalhando. Não tenho ideia do que está acontecendo nos bastidores, mas parece funcionar.

anakic
fonte
5
Neste caso, a consulta ainda pode estar em execução / suspensa em segundo plano, você simplesmente não a verá mais.
Áries51 de
1
Eu acho que isso mata a conexão, já que você tem que se reconectar depois disso.
anakic
2
Ele mata a conexão com o SSMS, mas não (necessariamente) com o db.
Áries51,
1
Eu tentei isso meu sql desligou. T_T
bot de
1
Se você não consegue ver, isso não existe.
ChrisD
13

Se você cancelar e ver aquela corrida

 sp_who2 'active'

(O Activity Monitor não estará disponível no antigo sql server 2000 FYI)

Identifique o SPID que você deseja matar, por exemplo, 81

Kill 81

Execute o sp_who2 'active' novamente e você provavelmente notará que ele está dormindo ... rolando para trás

Para obter o STATUS execute novamente o KILL

Kill 81 

Então você receberá uma mensagem como esta

 SPID 81: transaction rollback in progress. Estimated rollback completion: 63%. Estimated time remaining: 992 seconds.
Tom Stickel
fonte
11

Você pode usar um atalho de teclado ALT+ Breakpara interromper a execução da consulta. No entanto, isso pode não funcionar em todos os casos.

Yash Saraiya
fonte
1
Este é trabalhado para mim no estúdio de gerenciamento. Obrigado
Vishvanathsinh Solanki
3
--Find Session Id for respective all running queries
SELECT text, getdate(),*
 FROM sys.dm_exec_requests
CROSS APPLY sys.dm_exec_sql_text(sql_handle)

---Kill specific session
kill 125
Jai Nath Gupta
fonte
Adicione alguma explicação à sua resposta editando-a de forma que outras pessoas possam aprender com ela
Nico Haase
2

aparentemente no sql server 2008 r2 64bit, com consulta de longa duração do IIS, o kill spid não parece funcionar, a consulta é reiniciada novamente e novamente. e parece estar reutilizando os spid's. a consulta está fazendo com que o sql server ocupe 35% da CPU constantemente e bloqueie o site. Estou supondo que bc / ele não pode responder a outras perguntas para fazer login

Joseph McKinley
fonte
2
Eu adoraria ver uma fonte para isso.
Ant Swift de
1

Na minha parte, meu sql desligou quando tentei fechá-lo enquanto corria sem parar. Então o que eu fiz foi abrir meu gerenciador de tarefas e finalizar minha consulta sql. Isso parou meu sql e reiniciou.

robô
fonte
1

Uma resposta simples, se a caixa vermelha "parar" não estiver funcionando, é tentar pressionar os botões "Ctrl + Break" no teclado.

Se você estiver executando o SQL Server no Linux, existe um aplicativo que você pode adicionar à sua bandeja do sistema chamado "killall". Basta clicar no botão "killall" e, em seguida, clicar no programa que está travado em um loop e ele encerrará o programa. Espero que ajude.

Aubrey Love
fonte
1

Tenho sofrido da mesma coisa há muito tempo. Acontece especialmente quando você está conectado a um servidor remoto (que pode ser lento) ou você tem uma conexão de rede ruim. Duvido que a Microsoft saiba qual é a resposta certa.

Mas já tentei encontrar a solução. Apenas 1 abordagem leiga funcionou

  • Clique no botão Fechar sobre a guia de consulta que você está enfrentando. Depois de um tempo (se a Microsoft não for severa com você !!!), você poderá ver uma janela perguntando isso

"A consulta está em execução no momento. Quer cancelar a consulta?"

  • Clique em "Sim"

  • Depois de um tempo, ele perguntará se você deseja salvar esta consulta ou não?

  • Clique em "Cancelar"

E poste isso, pode ser que seu estúdio esteja estável novamente para executar sua consulta.

O que ele faz em segundo plano é desconectar sua janela de consulta da conexão. Portanto, para executar a consulta novamente, levará algum tempo para conectar o servidor remoto novamente. Mas acredite em mim, essa troca é muito melhor do que o sofrimento de ver aquele cronômetro que funciona para a eternidade.

PS: Isso funciona para mim, Kudos se funciona para você também. !!!

Maulik Modi
fonte
1
Ainda funcionou para mim e resolveu meu problema a partir de ->
ErocM