Deadlock
Fermé
Kagami
-
9 juil. 2013 à 13:24
blux Messages postés 26529 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 13 décembre 2024 - 18 juil. 2013 à 13:49
blux Messages postés 26529 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 13 décembre 2024 - 18 juil. 2013 à 13:49
6 réponses
blux
Messages postés
26529
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
13 décembre 2024
3 317
10 juil. 2013 à 10:44
10 juil. 2013 à 10:44
Salut,
en dehors du fait que le code que tu colles ne sert à rien, il n'y a pas de moyen de savoir à l'avance où se produit un deadlock (dans le cas contraire, on pourrait tout faire pour empêcher sa venue).
C'est donc à toi d'intercepter l'erreur, de vérifier que le rollback a bien eu lieu et de relancer l'intégralité de ta transaction.
en dehors du fait que le code que tu colles ne sert à rien, il n'y a pas de moyen de savoir à l'avance où se produit un deadlock (dans le cas contraire, on pourrait tout faire pour empêcher sa venue).
C'est donc à toi d'intercepter l'erreur, de vérifier que le rollback a bien eu lieu et de relancer l'intégralité de ta transaction.
oui , le problème c'est que ce n'est pas moi qui l'ai fait ,j'ai eu l'application déjà codée, et l'utilisateur de cette application à rencontré ce message d'erreur , et à la fin c'est à moi qui dois le résoudre mais j 'ai pas su comment commencer ce script :'(
-----------------est ce que ce script peut être la cause d'un DEADLOCK,???????
-----------------est ce que ce script peut être la cause d'un DEADLOCK,???????
blux
Messages postés
26529
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
13 décembre 2024
3 317
10 juil. 2013 à 13:15
10 juil. 2013 à 13:15
Désolé, je ne connais pas SQL Server pour t'en dire plus à ce niveau...
non maintenant je veux juste savoir est ce que ce script peut être la cause d'un DEADLOCK ?????
blux
Messages postés
26529
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
13 décembre 2024
3 317
10 juil. 2013 à 16:04
10 juil. 2013 à 16:04
Forcément, si son exécution a été stoppée par le moteur du SGBD, c'est qu'il a été impliqué dans un deadlock (impliqué ne veut pas dire qu'il en est la cause expresse).
En relançant le traitement, il est quasiment sûr que ça fonctionne...
En relançant le traitement, il est quasiment sûr que ça fonctionne...
Morgothal
Messages postés
1236
Date d'inscription
jeudi 22 avril 2010
Statut
Membre
Dernière intervention
19 mai 2015
183
10 juil. 2013 à 15:58
10 juil. 2013 à 15:58
Bonjour,
En regardant par exemple ce lien, peux-être pourras-tu comprendre qu'un deadlock ne se prévoit pas...
Ton script est peut-être la cause d'un deadlock.
En regardant par exemple ce lien, peux-être pourras-tu comprendre qu'un deadlock ne se prévoit pas...
Ton script est peut-être la cause d'un deadlock.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
quand je démarrage le traçage (sql profiler) il ne détecte rien au niveau de cette procédure...
blux
Messages postés
26529
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
13 décembre 2024
3 317
11 juil. 2013 à 08:48
11 juil. 2013 à 08:48
Le principe du deadlock est justement de ne pas être prévisible !
Comme je l'ai dit : relance la transaction, il y a 99,999999% de chances qu'elle repasse sans problème.
Comme je l'ai dit : relance la transaction, il y a 99,999999% de chances qu'elle repasse sans problème.
blux
Messages postés
26529
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
13 décembre 2024
3 317
11 juil. 2013 à 12:46
11 juil. 2013 à 12:46
On vient de te dire un certain nombre de fois que le deadlock (en conditions normales) n'est :
- ni prévisible
- ni reproductible
- ni solvable a priori
Tu pourras modifier la procédure tant que tu veux, s'il doit y avoir un deadlock, il se produira...
- ni prévisible
- ni reproductible
- ni solvable a priori
Tu pourras modifier la procédure tant que tu veux, s'il doit y avoir un deadlock, il se produira...
Morgothal
Messages postés
1236
Date d'inscription
jeudi 22 avril 2010
Statut
Membre
Dernière intervention
19 mai 2015
183
11 juil. 2013 à 15:54
11 juil. 2013 à 15:54
Tu peux exécuter ton script avec l'option WITH NO LOCK pour ne pas avoir de verrou, mais cela t'expose à plusieurs soucis potentiels...
Plus d'infos par ici...
Plus d'infos par ici...
c'est enfin je pense avoir trouvé la solution j 'ai testé plusieurs foi ça n'a pas donné d'erreur.
pour ceux qui veulent savoir comment :
on met le TRY CATCH à notre TRANSACTION ,dans le TRY on met apres chaque MISE A JOUR :
et dans le CATCH on écrit ce qui est cité au dessus.
DITES LE MOI SI C'EST RÉSOLU
pour ceux qui veulent savoir comment :
RETRY: -- Label RETRY ----N'oubliez pas cette ligne BEGIN TRANSACTION BEGIN TRY DECLARE ............... ....... --- Ecrivez vos requêtes ici ....... COMMIT TRANSACTION END TRY BEGIN CATCH PRINT 'Rollback Transaction' ROLLBACK TRANSACTION IF ERROR_NUMBER() = 1205 -- IF Deadlock Error Number BEGIN WAITFOR DELAY '00:00:00.03' -- Wait for 3 ms (LE DÉLAI C'est selon la taille de votre TRANSACTION) GOTO RETRY -- Go to Label RETRY END END CATCH
on met le TRY CATCH à notre TRANSACTION ,dans le TRY on met apres chaque MISE A JOUR :
WAITFOR DELAY '00:00:03'--et N'oubliez pas aussi cette ligne
et dans le CATCH on écrit ce qui est cité au dessus.
DITES LE MOI SI C'EST RÉSOLU
blux
Messages postés
26529
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
13 décembre 2024
3 317
17 juil. 2013 à 21:59
17 juil. 2013 à 21:59
Je ne connais pas cette syntaxe, mais ce que je peux dire, c'est que lorsque tu indiques que tu as testé plusieurs fois sans problème, ça n'en fait pas une garantie imparable contre les deadlocks. D'après la syntaxe, il semblerait que tu fasses un rollback puis une relance de la transaction, c'est effectivement le moyen de contourner le deadlock, mais ce n'est pas le moyen de l'éviter, puisqu'il est non prévisible...
blux
Messages postés
26529
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
13 décembre 2024
3 317
18 juil. 2013 à 13:49
18 juil. 2013 à 13:49
le problème pourra se produire si plusieurs utilisateurs font la même opération en même temps je suppose
C'est la condition nécessaire et suffisante du deadlock.
C'est la condition nécessaire et suffisante du deadlock.