10.11 Comment MySQL verrouille les tablesLa gestion des verrous sous MySQL est inblocable. Cela est réalisé en demandant toujours tous les droits, en même temps, au début de la requête, et en verrouillant toujours les tables dans le même ordre.
La méthode de verrouillage pour les verrous en écriture (
La méthode de verrouillage pour les verrous en lecture (
Quand un verrou est libéré, le verrou est rendu disponible pour les threads de la queue d'attente d'écriture, puis dans la queue d'attente de lecture.
Cela signifie que si vous avez de nombreuses modifications sur une table, les commandes Pour éviter ce genre de problème, vous pouvez rassembler toutes vos insertions dans une table temporaire, et faire une mise à jour importante de toute la table temporaire dans la fixe, une fois de temps en temps. Cela se réalise avec le code suivant : mysql> LOCK TABLES real_table WRITE, insert_table WRITE; mysql> insert into real_table select * from insert_table; mysql> delete from insert_table; mysql> UNLOCK TABLES;
Vous pouvez utiliser l'option Vous pouvez aussi changer la procédure de verrouillage dans le fichier ``mysys/thr_lock.c'' pour n'utiliser qu'une seule queue d'attente. Danx ce cas, les verrous d'écriture et de lecture auront les mêmes priorités, ce qui peut être utile dans certains cas. |