redog26
Messages postés4Date d'inscriptionjeudi 11 décembre 2003StatutMembreDernière intervention28 juin 2010
-
23 mai 2006 à 17:59
cs_skweeky
Messages postés259Date d'inscriptionmercredi 3 mai 2006StatutMembreDernière intervention11 janvier 2010
-
24 mai 2006 à 12:07
En voulant lancer deux jobs simultanément le message suivant s'est affiché sur l'historique du 2ème job aprés echec :
Exécuté en tant qu'utilisateur : domaine/user1. La transaction (ID du processus 59) a été bloquée sur les ressources lock par un autre processus et a été choisie comme victime. Relancez la transaction. [SQLSTATE 40001] (erreur 1205) Avertissement : la valeur nulle est éliminée par un agrégat ou par une autre opération définie. [SQLSTATE 01003] (erreur 8153). L'étape a échoué.
est ce du à un manque de ressources sur mon serveur SQL ou à ....?
cs_skweeky
Messages postés259Date d'inscriptionmercredi 3 mai 2006StatutMembreDernière intervention11 janvier 20108 24 mai 2006 à 12:07
C'est un deadlock...
La tache 1 bloque une table A parce qu'elle écrit dedans, puis s'aprete à lire dans la table B, tandis que la 2ème tache ecrit dans B puis essaye de lire A.
Donc les 2 attendent que l'autre libère une ressource. SQL server détecte ce genre de chose et choisit au hasard de tuer l'une des tâches (c'est la victime).
Pour résoudre cela il suffit en général de ré-écrire le code des 2 tâches, et faire que les 2 scripts accèdent aux tables dans le même ordre (si c'est possible).
Ou plus simple mais moins efficace à long terme de relancer la tâche qui était la victime (on peut par exemple essayer de la lancer 2 ou 3 fois automatiquement en cas d'echec).
Il faut essayer aussi de ne pas lancer ces tâches 2 ensembles dans le cas présent si c'est possible.