2010-05-22 2 views
-1

J'ai une configuration simple d'un ensemble d'auteurs et d'un ensemble de lecteurs travaillant avec une table MySQL ISAM. Les rédacteurs n'insèrent que des lignes tandis que les lecteurs ne vérifient que les nouvelles lignes. OK, donc je sais que je n'ai pas besoin d'un verrou dans cette situation, car je ne modifie pas les lignes existantes. Cependant, mes écrivains accèdent à une table de plus que besoin d'un verrou. Je renseignement ne semble pas pertinent, sauf pour la limitation suivante indiqué dans la documentation MySQL:Problème de verrouillage MySQL

Une session qui nécessite des verrous doivent acquérir toutes les serrures dont il a besoin une seule instruction LOCK TABLES. Alors que les verrous ainsi obtenus sont maintenus, la session peut accéder uniquement aux tables verrouillées . Par exemple, dans la séquence suivante des états, une erreur se produit pour la tentative d'accès à t2 parce qu'il n'a pas été verrouillé dans la serrure instruction TABLES:

Donc, pour accéder à la table, je veux insérer des lignes dans, j'ai besoin de le verrouiller, ce qui me cause des problèmes de performance. Des suggestions de comment contourner cela?

+0

Vous devriez nous donner plus d'informations sur la table pertinente et exactement pourquoi vous en avez besoin verrouillé. Cela nous donnera une meilleure idée des alternatives qui peuvent vous être proposées. – webbiedave

Répondre

0

Typiquement, vous verrouillez et déverrouillez immédiatement autour des requêtes nécessitant un verrouillage. La documentation indique simplement que pour tout jeu de requêtes exécuté pendant que vous avez un verrou, toutes les tables impliquées doivent être verrouillées. Vous pouvez déverrouiller dès que vous avez terminé et toucher toutes les autres tables. En outre, InnoDB prend en charge le verrouillage au niveau des lignes, ce qui est souvent préférable au verrouillage des tables pour les performances puisque les autres requêtes sur les autres lignes ne seront pas verrouillées en lecture pendant que vous écrivez également.