MySQL - LOCK invisible pour le SELECT
Bonjour à tous,
Cela fait quelques jours que l'on retourne le problême dans tous les sens, impossible de trouver la solution...
J'ai une 20aine de processus perl qui tourne en même tps, et qui tape dans la même bdd mysql.
on a une table commune, qui est une liste d'attente d'action a traiter. Cette table a une colonne "enCoursDeTraitement" ( 0/1 ) qui determine si l'action est déjà en cours de traitement par un autre processus.
Un processus fait donc un
Code:
1 2
|
SELECT idAction FROM actions WHERE enCoursDeTraitement = 0 LIMIT 1; |
puis, un fois qu'il a récupéré son action,
Code:
1 2
|
UPDATE actions SET enCoursDeTraitement = 1 WHERE idAction=$idAction; |
Le hic, c'est qu'avec 20 processus, il arrive plus que fréquemment qu'entre le SELECT et l'UPDATE, d'autre processus font un SELECT, et récupére la même action.
Ce qui fait que l'action est traitée plusieur fois.
Quel pourrait être la solution a ce problême ?