Salut laraki.fissel.
Envoyé par
laraki.fissel
Non aucun dead lock n'est détecté au niveau de la base.
Ce n'est pas au niveau de la base que cela se détecte mais dans vos traitements, et surtout sur la façon dont vous gérez vos transactions.
Envoyé par
laraki.fissel
je pense que la requete attend un commit d'un autre worker.
Si ce commit n'arrive jamais, votre transaction est bloquée. C'est ça le dead lock dont je vous parle.
Si l'on veut être puriste, le dead lock, ce n'est pas exactement votre cas. Vous avez deux ressources et deux utilisateurs.
Le premier utilisateur attend pour terminer la ressource N°1 de pourvoir débuter le ressource N°2.
Tandis que le second utilisateur attend pour terminer la ressource N°2 de pouvoir débuter la ressource N°1.
Ici, vous avez deux utilisateurs, dont l'un est bloqué et ne peut pas faire de commit.
L'autre se met à attendre que la ressource se libère et comme elle ne se libère pas, un time out termine brusquement le processus.
Vous devez vérifier que chaque intervention en mise à jour ou en suppression se fasse sous forme d'une transaction.
Pour expliquer simplement, vous devez être le seul à intervenir en écriture sur la ligne. On nomme cela une section critique.
Pour gérer les accès, vous devez les sérialiser. Pour ce faire, vous devez déclarer dans le fichier my.ini :
transaction-isolation = SERIALIZABLE
Pour gérer vos transactions, je vous conseille de lire : https://dev.mysql.com/doc/refman/5.7/en/commit.html
@+
Partager