2010-03-30 3 views
1

Je voudrais savoir à partir de mon application si une table myisam peut accepter des écritures (c'est-à-dire non verrouillée). Si une exception est levée, tout va bien car je peux attraper ceci et consigner l'instruction échouée dans un fichier. Cependant, si une commande 'flush tables with read lock' a été émise (éventuellement pour la sauvegarde), la requête que j'envoie sera pour ainsi dire suspendue pour toujours.détection des «tables de vidage avec verrouillage de lecture» en php

Si une table est verrouillée à la fois, insérez-la correctement. Mais quand ce verrou global est appliqué, ma requête attend juste.

La requête que j'exécute est une instruction d'insertion. Si cette instruction échoue ou se bloque, l'expérience utilisateur est dégradée. J'ai besoin d'un moyen d'envoyer la requête au serveur et de l'oublier (à peu près).

Est-ce que quelqu'un a des suggestions sur la façon de faire face à cela?

-set un délai d'attente de requête?
-rouler une requête asynchrone et laisser le verrou expirer pendant que l'application continue?
-fork mon processus php?

S'il vous plaît laissez-moi savoir si je peux fournir et des précisions ou des détails.

Répondre

1
SHOW OPEN TABLES LIKE "table_name"; 

vous donne des résultats quelque chose comme:

database, table, in_use, name_locked 
test, my_table, 1, 0 

La colonne « IN_USE » vous dira si quelqu'un d'autre un verrou en lecture/écriture sur cette table.

Questions connexes