web-dev-qa-db-fra.com

Comment puis-je tuer en toute sécurité une requête MSSQL longue?

Récemment, nous avons eu un emploi SQL insérant dans une base de données. La requête était en cours de course pendant quelques jours inutilement pour qu'il ait été tué avec Kill Spid. Le processus a ensuite commencé à rouler pendant plusieurs jours et semblait juste suspendre là-bas.

Running Kill Spid avec StatingOnly a donné un message indiquant que "l'achèvement estimée" était de 100% et que le temps estimé à gauche "était de 0 secondes.

Finalement, nous avons dû redémarrer le service SQL qui a supprimé le processus.

Ma question est - comment devriez-vous tuer un processus SQL? Est-ce la seule façon?

5
Anonymous

J'ai vu un "accrocher" à la suite de la décrire, et le seul moyen de vous en débarrasser est de redémarrer le service SQL, comme vous l'avez fait.

MAIS Il est important de s'assurer que le rendement est vraiment accroché, et ne pas toujours rouler réellement (comme vous l'avez vu, le Statusonly n'est pas complètement fiable ). Le risque est que si vous redémarrez le service SQL pendant que la restauration est toujours en train de rouler réellement , la base de données sera bloquée en mode "récupération" après que vous Redémarrez le service SQL jusqu'à ce que la restauration soit terminée.

La seule autre façon que j'ai été capable de dire est d'utiliser l'optimisation du moniteur d'activité SQL et de voir si le nombre de CPU et/ou IO _ _ comptez pour que la SPID progresse toujours. Si c'est le cas, la restauration est toujours en cours et vous ne devriez pas encore redémarrer SQL. Donnez-lui plus de temps.

n point supplémentaire: Ne soyez pas tenté de faire des choses folles comme la suppression du fichier journal. Cela "arrêter" le retour de transaction, mais au prix de l'intégrité de votre base de données. La seule autre technique que j'ai utilisée (en supposant que la transaction roulée est le uniquement Changement important de la base de données depuis la dernière sauvegarde) consiste simplement à restaurer De la dernière sauvegarde que nous avons déterminée serait plus rapide et plus facile que d'attendre une journée supplémentaire pour une annulée. Bien entendu, cela dépend fortement de la nature de votre activité de base de données.

3
BradC