117 votes

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

J'utilise SQL Server 2008 et son Management Studio. J'ai exécuté une requête qui produit de nombreuses lignes. J'ai essayé de l'annuler via le bouton rouge d'annulation, mais elle ne s'est pas arrêtée au cours des 10 dernières minutes. D'habitude, elle s'arrête au bout de 3 minutes.

Quelle peut en être la raison et comment l'arrêter immédiatement ?

129voto

mmhasannn Points 10115
sp_who2 'active'

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

kill {SPID value}

73voto

Remus Rusanu Points 159382

Quelle pourrait être la raison

L'annulation d'une requête est immédiate, à condition que votre attention peuvent atteindre le serveur et être traitées. Une requête doit être dans un état annulable, ce qui est presque toujours le cas sauf si vous effectuez certaines opérations comme l'appel d'un service web depuis SQLCLR. Si votre attention ne peut atteindre le serveur, c'est généralement dû à planificateur surcharge.

Mais si votre requête fait partie d'une transaction qui doit être annulée, l'annulation ne peut pas être interrompue. Si cela prend 10 minutes, alors cela prend 10 minutes et il n'y a rien que vous puissiez faire. Même le redémarrage du serveur ne vous aidera pas, il ne fera que prolonger le démarrage puisque la récupération doit terminer le rollback.

Pour répondre dont raison spécifique s'applique à votre cas, vous devrez enquêter vous-même.

46voto

user1608817 Points 471

Exécutez d'abord la commande ci-dessous :

sp_who2

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

KILL {SPID value}

25voto

C'est une réponse un peu stupide, mais elle fonctionne de manière fiable, du moins dans mon cas : Dans Management Studio, lorsque l'option "Cancel Executing Query" 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 dis oui, et voilà qu'après quelques secondes, l'exécution s'arrête. Ensuite, il me demande si je veux sauvegarder le document avant de le fermer. À ce stade, je peux cliquer sur Annuler pour garder le document ouvert et continuer à travailler. Je n'ai aucune idée de ce qui se passe en coulisses, mais cela semble fonctionner.

22voto

Tom Stickel Points 4201

Si vous annulez et voyez que l'exécution

 sp_who2 'active'

(Activity Monitor ne sera pas disponible sur les anciens serveurs sql 2000 pour info)

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

Kill 81

Exécuter le sp_who2 'active' et vous remarquerez probablement qu'il dort... et qu'il revient en arrière.

Pour obtenir le STATUS, exécutez à nouveau le KILL.

Kill 81 

Vous obtiendrez alors un message comme celui-ci

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X