Requête lente sur information_schema.tables

- Je exécuter un ensemble d'applications développées sur un hébergement mutualisé offre de service. J'ai déménagé de statique configurée liste de tables de tables de, à un système basé sur une liste de tables de bases sur un préfixe de la D/B métadonnées. Quand j'ai fait la promotion de cette version de la fonction publique, mon par demande de latence a augmenté en moyenne de 2.3–2.4 secondes. Certains instrumentation a révélé que c'était entièrement à l'une requête SQL:

SELECT TABLE_NAME AS name
FROM information_schema.tables
WHERE TABLE_SCHEMA = '<DBname>'
AND TABLE_NAME LIKE '<TablePrefix>%';

J'ai utilisé ce parce que je voulais explicitement le nom de la colonne dans le jeu de résultats. Cependant, le codage autour de cela avec une autre requête qui ajoute une ligne de code qui a couru dans <2 mSec:

SHOW TABLES LIKE '<TablePrefix>%';

Mon fournisseur de services utilise MySql Enterprise 5.0.92-50 donc je ne peux pas le faire tout de profilage. C'est une mise à l'échelle problème ne se produit pas sur mon environnement de dev et test VM où je peux le profil. Ils prendre en charge des milliers d'utilisateurs de sorte que le live schéma sera très grand, mais tout de même connexion et la plupart des requêtes ne prendre que quelques millisecondes.

Personne ne sait pourquoi l'interrogation de la mémoire à base information_schema sur un grand système multi-utilisateur serait-il si long?

OriginalL'auteur TerryE | 2012-07-02