2010-01-06 27 views
1

Existe-t-il un moyen d'obtenir des requêtes mysql pour ne pas prendre de verrous sur les tables myisam? Mon problème semble être que mon indexeur Sphinx Search prend un verrou sur une de mes tables myisam depuis plus de 60 qui semble faire attendre les instructions de mise à jour sur les verrous qui seront libérés, ce qui rendra d'autres requêtes en attente des instructions de mise à jour compléter. L'indexeur utilise mysql_use_result et effectue une grande partie du travail d'indexation avant d'appeler mysql_free_result. C'est ma meilleure estimation de ce qui se passe au moins mais s'il vous plaît faites le moi savoir si cela vous semble faux.Pourquoi les requêtes mysql prennent-elles le verrou de la table dans l'isolation sans être validées?

Une façon de résoudre le problème semble être de subdiviser les requêtes indexeur par des plages id. Mais il semble que je ne devrais pas avoir à faire cela car je n'ai vraiment pas besoin de cette requête pour empêcher toute autre requête de s'exécuter en même temps. La performance est beaucoup plus importante que la cohérence dans ce cas d'utilisation.

Merci!

+0

http://stackoverflow.com/questions/917640/any-way-to-select-without-causing-locking-in-mysql –

+0

Je pense que j'ai trouvé une solution potentielle qui consiste à "définir une variable globale low_priority_updates = 1". cela devrait permettre à certaines requêtes de ne pas attendre l'instruction de mise à jour. Je rapporterai si cela fonctionne. – Peder

+0

les niveaux d'isolement ne sont pas très significatifs avec les tables myisam, utilisez innodb si vous avez besoin d'un support de transaction – nos

Répondre

1

Il semble que les requêtes mysql prennent toujours des verrous en lecture sur les tables myisam.

La solution à mon problème était de mettre bas-priority-updates = 1 dans la section [mysqld] de my.cnf.

Je me demande encore s'il y a un moyen de faire des requêtes dans MySQL sans prendre les verrous en lecture, mais je vais ouvrir une autre question avec un meilleur titre pour cela.

Merci!