Mysql
 sql >> Base de données >  >> RDS >> Mysql

comment éviter les blocages dans mysql

À ma connaissance, une sélection n'acquiert pas de verrou et ne devrait pas être la cause du blocage.

Chaque fois que vous insérez/mettez à jour/ou supprimez une ligne, un verrou est acquis. Pour éviter un blocage, vous devez ensuite vous assurer que les transactions simultanées ne mettent pas à jour la ligne dans un ordre qui pourrait entraîner un blocage. D'une manière générale, pour éviter les interblocages, vous devez acquérir le verrou toujours dans le même ordre même dans différentes transactions (par exemple, toujours la table A en premier, puis la table B).

Mais si, dans une transaction, vous insérez dans une seule table, cette condition est remplie, et cela ne devrait alors généralement pas conduire à un blocage. Faites-vous autre chose dans la transaction ?

Un interblocage peut cependant se produire s'il y a des index manquants . Lorsqu'une ligne est insérée/mise à jour/supprimée, la base de données doit vérifier les contraintes relationnelles, c'est-à-dire s'assurer que les relations sont cohérentes. Pour ce faire, la base de données doit vérifier les clés étrangères dans les tables associées. Il pourrait entraîner l'acquisition d'un autre verrou que la ligne modifiée. Assurez-vous alors de toujours avoir un index sur les clés étrangères (et bien sûr les clés primaires), sinon cela pourrait entraîner un verrou de table au lieu d'un verrouillage de ligne . Si un verrouillage de table se produit, le conflit de verrouillage est plus élevé et la probabilité d'un blocage augmente.

Je ne sais pas exactement ce qui se passe dans votre cas, mais peut-être que cela aide.