2010-01-03 4 views
0

Je dois utiliser une table pour un système de file d'attente. La table sera constamment mise à jour. Par exemple, plusieurs utilisateurs sur mon site Web vont ajouter leurs fichiers pour le processus, et j'ai entendu que lorsque des mises à jour se produisent simultanément à partir de plusieurs utilisateurs, la table devient non réactive ou quelque chose comme ça.comment puis-je verrouiller les tables dans MySQL ou phpmyadmin?

ai-je besoin de tables de verrouillage dans cette situation? comment puis-je appliquer un verrou à une table mysql?

Répondre

0

Lorsque vous effectuez plusieurs mises à jour en même temps, vous pouvez vous retrouver dans une situation de blocage. Des moteurs tels que InnoDB détectera ceci et échouera une de vos transactions (vous pouvez réessayer, mais seulement la transaction entière).

Vous pouvez éviter cela en verrouillant la table, mais cela réduit la concurrence.

Les moteurs tels que MyISAM (qui ne prend pas en charge MVCC ou les transactions de toute façon) utilisent implicitement le verrouillage de table. Ces verrous de table existent uniquement pour la durée d'une requête; ils sont automatiquement libérés rapidement après que la table ne soit plus nécessaire (pas nécessairement le plus tôt possible, mais bientôt)

Je recommande de ne pas utiliser TABLE DE VERROUILLAGE sauf si vous en ressentez le besoin; Si vous obtenez un blocage, réessayez la transaction.

1

ai-je besoin de tables de verrouillage dans cette situation?

Toutes les tables peuvent être verrouillées, il n'y a pas de type de table spécial. Cela dit, affrontez le problème lorsque vous rencontrez des blocages. Isolation levels sont aussi un sujet étroitement lié.

Comment puis-je appliquer un verrou à une table mysql?

Il y a le LOCK TABLES syntax - this article couvre comment & pourquoi vous souhaitez verrouiller les tables.

2

Par constamment mis à jour voulez-vous dire qu'il sera ajouté à 10.000 fois par seconde? Même pour les serveurs de milieu de gamme, cela représente toujours 10 000 opportunités par seconde pour que la table soit partagée par d'autres utilisateurs.

Il est uniquement nécessaire de verrouiller la table lorsque plusieurs opérations dépendantes doivent se produire en tant qu'unité. Dans la plupart des cas, il suffit d'inclure la série d'opérations dans une transaction de base de données . Si les "mises à jour constantes" sont simplement insert sometable values (...), il sera facile de garantir la cohérence des transactions.

Questions connexes