Méthodes de verrouillage <<< |
Problème de verrouillage de tables | Optimisation de MySQL >>> |
7.3 Verrouillage de tables 7 Optimisation de MySQL Manuel de Référence MySQL 4.1 : Version Française . Méthodes de verrouillage ->Problème de verrouillage de tables |
7.3.2 Problème de verrouillage de tables
Le système de verrou de MySQL est exempt de blocage. MySQL utilise le verrouillage de table (au lieu du verrouillage de ligne ou de colonne) sur tous les types de tables, sauf InnoDB et BDB , pour obtenir un système de verrou à très haute vitesse. Pour les grandes tables, le verrouillage de table est bien plus rapide que le verrouillage de page, mais il y a aussi des inconvénients.Pour les tables InnoDB et BDB , MySQL n'utilise le verrouillage de table que vous le demandez explicitement avec LOCK TABLES . Pour ces tables, nous vous recommandons de ne jamais utiliser la commande LOCK TABLES , car InnoDB utilise un verrouillage de ligne automatique, et BDB utilise un verrouillage de pages, pour assurer l'isolation des transactions. Depuis MySQL version 3.23.7, vous pouvez insérer des lignes dans les tables MyISAM , en même temps que d'autres threads y lisent. Notez que, actuellement, cela ne fonctionne que si il n'y a pas de trous après les lignes effacées dans la table, au moment de l'insertion. Lorsque tous les trous ont été bouchés avec de nouvelles données, les insertions simultanées seront automatiquement réactivées.Le verrouillage de table permet à de nombreux threads de lire dans la même table, mais si un thread désire écrire dans la table, il doit obtenir un verrou en écriture pour avoir un accès exclusif. Durant la modification, les autres threads qui voudront lire dans cette table, devront attendre. Comme les modifications de tables sont considérées comme plus importantes que les lectures avec SELECT , toutes les commandes qui modifient la table ont priorités sur les lectures. Cela devrait vous assurer que les modifications ne sont pas retenues trop longtemps, à cause de nombreuses lectures sur une même table. Vous pouvez toutefois modifier cela avec l'option LOW_PRIORITY des commandes de modification, et l'option HIGH_PRIORITY de SELECT ).Depuis MySQL version 3.23.7, vous pouvez utiliser la variable max_write_lock_count pour forcer MySQL à laisser temporairement la place à toutes les commandes SELECT , après un certain nombre de modifications dans la table. Le verrouillage de table est une mauvaise technique dans les situations suivantes :
|
<< | Problème de verrouillage de tables | >> |
Méthodes de verrouillage | Verrouillage de tables | Optimisation de MySQL |