J'ai un SQLjob qui appelle xp_cmdshell
qui est utilisé pour vider un fichier txt sur un site ftp via un script.
Parfois, il échoue et le travail est bloqué dans un état exécutable. En général, je tue la session et elle est effacée.
Cependant, j'ai deux sessions suspendues dans un état limbo.
sp_WHO2 53 -- running from 7/8/2018
SP_WHO2 98 -- running from 6/16/2018
L'état du travail indique son Runnable
mais la commande est KILLED/ROLLBACK
.
Kill 53 with status only
Sortie
SPID 53: transaction rollback in progress. Estimated rollback completion: 0%. Estimated time remaining: 0 seconds.
KILL 98 with status only
Sortie
SPID 98: transaction rollback in progress. Estimated rollback completion: 0%. Estimated time remaining: 0 seconds.
Comment dois-je procéder pour effacer ces sessions?
J'ai des problèmes de performances avec SQL Server, ce qui m'a conduit à ces sessions. J'ai fait quelques recherches et me fait croire que cela augmentera les fichiers journaux et causera des problèmes de performances. Je ne sais pas si le problème actuel est dû à ces sessions mais ce sont des requêtes coûteuses actives. J'ai donc pensé partir d'ici. Je suis développeur ici et je suis conscient que le moniteur d'activité est obsolète dans SQL SERVER 2014 Mais j'ai vérifié le moniteur d'activité et ci-dessous les images.
Pouvez-vous suggérer comment je peux m'y prendre?
J'ai lu un blog sur un tel scénario par Brent Ozar
- Rollback: que se passe-t-il lorsque vous TUEZ une session? .
J'ai appris à la dure en cherchant à corriger la cause profonde.
AK
Vous pouvez essayer de tuer le processus Windows qui a été généré avec xp_cmdshell
car ce processus est probablement en cours d'exécution et n'est pas géré en supprimant le spid de SQL Server. La façon dont vous le décrivez, je suppose que le programme ftp est toujours en cours d'exécution.
En effet, la commande kill
ne supprime pas les programmes qui ont été démarrés hors processus.
Vous pouvez simuler le scénario comme ceci:
Dans une fenêtre de requête SQL, démarrez un processus:
xp_cmdshell 'notepad.exe'
puis après avoir tué ce spid, j'obtiens la même sortie dans sp_who2 que vous
54 RUNNABLE Administrator hostname . master KILLED/ROLLBACK 0 0 07/24 14:23:02 Microsoft SQL Server Management Studio - Query 54 0
Mais j'ai toujours un processus notepad.exe en cours d'exécution:
C:\Users\Administrator>tasklist | find "notepad"
notepad.exe 4676 Services 0 3 788 K
Une fois que j'ai tué ce processus notepad.exe, mon spid SQL Server a également disparu.
Si vous voulez savoir quel processus vous devez tuer, l'Explorateur de processus devrait l'afficher comme un processus enfant de sqlserver.exe comme ceci (vous devrez peut-être démarrer procexp.exe en tant qu'administrateur):