web-dev-qa-db-fra.com

Comment tuer/arrêter une longue requête SQL immédiatement?

J'utilise SQL Server 2008 et son studio de gestion. J'ai exécuté une requête qui génère plusieurs lignes. J'ai essayé de l'annuler via le bouton rouge d'annulation, mais cela ne s'est pas arrêté depuis 10 minutes. Il s'arrête généralement dans les 3 minutes. 

Quelle pourrait être la raison et comment puis-je l'arrêter immédiatement?

74
sequel.learner

Quelle pourrait être la raison 

Une requête d'annulation est immédiate, à condition que votre attention puisse atteindre le serveur et soit traitée. Une requête doit être dans un état annulable, ce qui est presque toujours vrai, sauf si vous effectuez certaines opérations, comme appeler un service Web à partir de SQLCLR. Si votre attention ne peut pas atteindre le serveur est généralement due à scheduler overload.

Mais si votre requête fait partie d'une transaction à annuler, celle-ci ne peut pas être interrompue. Si cela prend 10 minutes, il faut 10 minutes et vous ne pouvez rien y faire. Même le redémarrage du serveur ne va pas aider, cela ne fera que rendre le démarrage plus long car la récupération doit terminer la restauration.

Pour répondre à quelle raison spécifique s'applique à votre cas, vous devez vous renseigner vous-même.

54
Remus Rusanu
sp_who2 'active'

Vérifiez les valeurs sous CPUTime et DiskIO . Notez le SPID du processus ayant une grande valeur comparativement.

kill {SPID value}
90
Mudassir Hasan

Commencez par exécuter la commande ci-dessous:

sp_who2

Après cela, exécutez la commande ci-dessous avec SPID, que vous avez obtenue à partir de la commande ci-dessus:

KILL {SPID value}
33
user1608817

C'est une sorte de réponse idiote, mais cela fonctionne de manière fiable au moins dans mon cas: Dans le studio de gestion, lorsque l'option "Annuler l'exécution de la requête" n'arrête pas la requête, je clique simplement pour fermer le document SQL en cours. il me demande si je veux annuler la requête, je réponds oui et voilà que, dans quelques secondes, son exécution est arrêtée. Après cela, il me demande si je veux sauvegarder le document avant de fermer. À ce stade, je peux cliquer sur Annuler pour garder le document ouvert et continuer à travailler. Aucune idée de ce qui se passe dans les coulisses, mais cela semble fonctionner.

16
anakic

Vous pouvez utiliser un raccourci clavier ALT + Break pour arrêter l'exécution de la requête. Cependant, cela peut ne pas réussir dans tous les cas.

11
Yash Saraiya

Si vous annulez et voyez cette course

 sp_who2 'active'

(Le moniteur d'activité ne sera pas disponible sur l'ancien FYI du serveur SQL 2000) 

Repérez le SPID que vous souhaitez tuer, par exemple. 81 

Kill 81

Exécutez à nouveau le sp_who2 'active' et vous remarquerez probablement qu'il est en train de dormir ...

Pour obtenir le statut, relancez le KILL 

Kill 81 

Ensuite, vous recevrez un message comme celui-ci

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

apparemment sur sql server 2008 r2 64bit, avec une requête longue de IIS, le kill spid ne semble pas fonctionner, la requête est simplement relancée à plusieurs reprises. et il semble réutiliser les spid. la requête amène le serveur SQL à prendre comme 35% de CPU constamment et à accrocher le site Web. Je suppose que bc/il ne peut pas répondre aux autres requêtes de connexion

1
Joseph McKinley

De mon côté, mon sql a été raccroché lorsque j'ai essayé de le fermer tout en courant. Donc, ce que j'ai fait est que j'ouvre mon gestionnaire de tâches et termine la tâche ma requête SQL. Cela arrête mon sql et le redémarre. 

1
bot

Une réponse simple, si la case rouge "stop" ne fonctionne pas, est d'essayer d'appuyer sur les touches "Ctrl + Break" du clavier. 

Si vous utilisez SQL Server sous Linux, vous pouvez ajouter une application à votre système, appelée "killall" Cliquez simplement sur le bouton "killall", puis cliquez sur le programme bloqué dans une boucle et il se terminera. le programme. J'espère que cela pourra aider. 

1
Aubrey Love

Je souffre de la même chose depuis longtemps. Cela se produit spécialement lorsque vous êtes connecté à un serveur distant (qui peut être lent) ou que votre connexion réseau est mauvaise. Je doute que Microsoft sache quelle est la bonne réponse.

Mais depuis que j'ai essayé de trouver la solution. Une seule approche profane a fonctionné 

  • Cliquez sur le bouton de fermeture sur l'onglet de la requête dont vous êtes victime . Après un moment (Si Microsoft n'est pas dur avec vous !!!), une fenêtre vous demandant cette option pourrait s'afficher.

"La requête est en cours d'exécution. Voulez-vous l'annuler?"

  • Cliquez sur "oui"

  • Après un moment, il vous sera demandé si vous souhaitez enregistrer cette requête ou non.

  • Cliquez sur "Annuler"

Et postez cela, peut-être que votre studio est à nouveau stable pour exécuter votre requête.

Ce qu’il fait en arrière-plan est de déconnecter votre fenêtre de requête avec la connexion. Donc, pour relancer la requête, la connexion du serveur distant prendra du temps. Mais croyez-moi, ce compromis est bien meilleur que la souffrance de voir cette minuterie courir pour l'éternité. 

PS: Cela fonctionne pour moi, Kudos si fonctionne pour vous aussi. !!!

0
Maulik Modi