Est-il possible de détecter les tables verrouillées dans MySQL? Je veux dire des tables verrouillées par le LOCK TABLE table WRITE/READ
commande.
(Notez que les lecteurs intéressés à détecter des verrous nommés acquis avec GET_LOCK
devrait lire Affiche tous les verrous actuels de get_lock à la place.)
SHOW OPEN TABLES
pour afficher le statut de chaque table et son verrou.
Pour les verrous nommés, regardez Afficher tous les verrous actuels de get_lock
Utilisation SHOW OPEN TABLES
: http://dev.mysql.com/doc/refman/5.1/en/show-open-tables.html
Vous pouvez faire quelque chose comme ça
SHOW OPEN TABLES WHERE `Table` LIKE '%[TABLE_NAME]%' AND `Database` LIKE '[DBNAME]' AND In_use > 0;
vérifier toutes les tables verrouillées dans une base de données.
Vous pouvez utiliser SHOW OPEN TABLES
pour afficher le statut de verrouillage de chaque table. Plus de détails sur la page de documentation de la commande sont ici .
Le moyen le plus simple est:
SHOW OPEN TABLES WHERE In_use > 0
Vous obtenez uniquement les tables verrouillées de la base de données actuelle.
Vous pouvez créer votre propre verrou avec GET_LOCK (lockName, timeOut)
Si vous faites une GET_LOCK(lockName, 0)
avec un délai d'expiration de 0 avant de verrouiller les tables, puis de suivre avec un RELEASE_LOCK(lockName)
, tous les autres threads effectuant un GET_LOCK()
obtiendront un la valeur 0 qui leur dira que le verrou est maintenu par un autre thread.
Cependant, cela ne fonctionnera pas si tous les threads n’appellent pas GET_LOCK()
avant de verrouiller les tables. La documentation pour le verrouillage des tables est ici
J'espère que ça t'as aidé!
Cet article explique comment obtenir des informations sur les ressources MySQL verrouillées. mysqladmin debug
_ pourrait également être utile.
Vous pouvez également obtenir tous les détails pertinents de performance_schema:
SELECT
OBJECT_SCHEMA
,OBJECT_NAME
,GROUP_CONCAT(DISTINCT EXTERNAL_LOCK)
FROM performance_schema.table_handles
WHERE EXTERNAL_LOCK IS NOT NULL
GROUP BY
OBJECT_SCHEMA
,OBJECT_NAME
Cela fonctionne comme
show open tables WHERE In_use > 0