2011-08-17 6 views
5

Nous disposons d'un logiciel "crm-like" simple dans notre société. Il y a des requêtes complexes qui prenaient du temps, des requêtes quotidiennes ... donc je suis en train de tester quelques modifications pour utiliser les tables temporaires pour remplacer toutes les jointures et sous-requêtes complexes dont nous avons besoin.Tables temporaires MYSQL - Comment afficher les tables actives

Jusqu'ici tout va très bien, a obtenu une vitesse de 90% +.

Depuis son application web (codeigniter + mysql), je prévois de le mettre dans un environnement de "production-test" afin que 50% des utilisateurs puissent m'aider à le tester. Je voudrais surveiller les tables qui sont actives, et si possible pour chaque connexion.

Ma question est - Est-il possible de voir tous les TABLES TEMPORAIRES actifs dans l'instance mysql? Peut-être voir ses données? J'ai lu quelque chose à propos d'un PLUGIN ou quelque chose comme, mais l'article était loin de désordre et je ne comprends pas.

Merci beaucoup et désolé pour mon anglais - pas ma langue maternelle.

+0

appartient sur http://www.serverfault.com Q & A pour les administrateurs système et les professionnels de support de bureau – Mchl

Répondre

-1

Lorsque votre ensemble de données devient plus grand, les tables temporaires ne vous aideront pas. En fin de compte, comment aident-ils? Les données doivent être copiées dans ces tables après avoir calculé le résultat, pourquoi ne pas mettre en cache les résultats avec memcached?

En outre, j'ai vu des bases de données qui sont assez grandes (des dizaines de gigaoctets) et fonctionnent sur une seule machine et les requêtes se déroulaient rapidement. Il y a une question si vous avez configuré votre serveur de base de données correctement (logiciel et matériel). Vous pourriez avoir une accélération temporaire, mais il n'y a aucune garantie que cela fonctionnera de façon permanente. J'optimiserais l'application, les requêtes, le logiciel et le matériel requis pour exécuter l'application, puis je mettrais les résultats en mémoire cache avec memcache à moins que vous ayez besoin de la dernière version du résultat de la requête.

+1

En désaccord. Les tables temporaires sont très utiles pour les requêtes complexes lorsque vous avez de nombreuses mises à jour avec des données provenant de nombreuses tables. –

+0

@michaelhanon votre désaccord ne mentionne ni ne fait référence à un seul fait. Cela signifie simplement que c'est votre opinion personnelle. Vous pouvez être en désaccord, mais cela ne veut pas dire que vous avez raison. –

4

table temp = temporaire, il a supprimé juste après la requête

il n'y a pas de solution directe, sauf l'enregistrement de toutes les requêtes et exécuter un par un à l'examen qui requête nécessite tmp_table

les variables système comme Created_tmp_tables pourrait donner quelques idées

mysql> show status like '%tmp%'; 
+-------------------------+-------+ 
| Variable_name   | Value | 
+-------------------------+-------+ 
| Created_tmp_disk_tables | 0  | 
| Created_tmp_files  | 0  | 
| Created_tmp_tables  | 0  | 
+-------------------------+-------+ 
1

l'un des problèmes de tables temporaires est suivi en fait l'utilisation, puis il y a les frais généraux de la création, l'indexation et de les supprimer - en particulier avec une appli web cation où la durée de vie de la table temporaire est généralement aussi longue que la durée de vie de la requête HTTP. Lorsque des résultats pré-compilés (ie des vues matérialisées) seront utiles, j'ai mis en place une table conventionnelle, en ajoutant des champs qui référencent l'identifiant de connexion MySQL/l'identifiant de session web/la requête source + le temps généré en fonction sur le TTL pour les données et si elle sera partagée ou non. En plus d'obtenir un suivi détaillé de l'utilisation de la table, il est beaucoup plus facile d'aborder le réglage des requêtes et bien sûr, le schéma est mieux documenté.

-1

Je crois que cela n'a pas de sens dans les tables temporaires de vue parce qu'elles vivent pendant la connexion et meurent après la fermeture des connexions. Mais il y a un fait important sur la table temporaire. Donc, si vous utilisez une connexion persistante dans vos scripts, la table temporaire va vivre pendant la vie de cette connexion et les clients qui utilisent celle-ci auront accès aux mêmes tables temporaires. Dans ce cas également, la table temporaire consommera les ressources système.Pour l'éviter, vous devez supprimer manuellement les tables temporaires après l'exécution de la requête nécessaire requête qui est utilisée cette table temporaire.

Questions connexes