2010-10-22 3 views
11

Nous avons remarqué que MySQL rapporte un très grand nombre de tables de disques temporaires (plus de 10 000), ce qui est rapporté par Server Density. Essayé de comprendre un peu plus à ce sujet.Nombre élevé de tables de disques temporaires MySQL

  • Pourquoi les tables de disques temporaires sont-elles créées par MySQL?
  • Quel impact ont-ils sur la performance?
  • Sont-ils jamais supprimés par MySQL ou ce nombre va-t-il simplement augmenter?

Répondre

15

Les tables temporaires peuvent être créées pour de nombreuses raisons. Toute opération de sélection ayant un grand ensemble de données et nécessitant un tri sera écrite en une seule opération. Les tables temporaires réelles créées par les requêtes directement (type de table TEMPORARY) sont effectuées par connexion, donc si vous avez un script avec 50 connexions chacune faisant la même table temporaire, c'est 50 ensembles de fichiers temporaires sur disque pour eux . Groupe de raisons de création de table temporaire par ordre et distinct par Les E/S sur disque sont la partie la plus onéreuse d'un SGBD. En général, si ces tables sont destinées à de grands ensembles de données, vous limitez probablement les performances de DB à celles de votre système d'entrée/sortie. Mais généralement, en étant simplement existants, ils ne mâchent que de l'espace disque et pas grand-chose d'autre.

Les tables temporaires à tri doivent se nettoyer à la fin de la requête. La table temporaire du type 'TEMPORARY' se nettoie automatiquement lorsque la connexion à laquelle elle est attachée est fermée. Si vous utilisez des connexions persistantes, les tables TEMPORARY resteront jusqu'à ce que vous (ou un programme) les supprime manuellement.

+0

ah je vois, donc si vous utilisiez des connexions persistantes sur un serveur occupé, nous pourrions voir la valeur augmenter à une grande valeur, mais il n'y a rien à craindre? – Tom

+1

dépend de la façon dont les tables sont créées. créer une table temporaire 'A' dans une connexion est très bien. les ré-utilisations ultérieures de la connexion réutiliseront simplement la même table. mais si vous les générez avec des noms aléatoires, vous fuirez ces tables temporaires jusqu'à ce que la connexion soit fermée et que mysql soit nettoyé. –

+0

Fuite où, sur le disque, en mémoire? – Tom

1

Vous avez défini plusieurs index sur des tables. Avez-vous déjà pensé à la façon dont l'indexation fonctionne?

Simplement un index est une table temporaire dans dbase qui conserve une copie de la colonne indexée triée. Lorsqu'une nouvelle ligne est insérée, dBase met un nouveau record dans le tableau de température au bon endroit donc un indice a les résultats suivants:

A) Avantages:

1) Augmentation de la vitesse de recherche, car la table est trié dans une table temporaire basée sur le champ indexé (s)

B) Inconvénients:

1) Ralentissez (Create, Update, Delete) car mêmes actions doivent être effectuées sur des tables temporaires en cas de besoin.

2) La taille de la base de données augmente en raison de l'utilisation de tables temporaires.

Conclusion:

L'indexation est un compromis de grande taille db et insertion plus lente et rapide recherche en grande quantité de données. Utilisez l'indexation sur les champs que vous appelez fréquemment les critères de recherche (WHERE) et supprimez les index supplémentaires pour optimiser votre conception db.

6

Tout d'abord, lisez the answer by Marc B Il s'agit de la raison pour laquelle vous avez beaucoup de tables temporaires. Quoi qu'il en soit, les tables temporaires elles-mêmes ne sont pas mauvaises, la mauvaise chose est "sur la table temporaire sur le disque" qui est lente et cause beaucoup d'E/S sur le disque.

Pour éviter une table temporaire à stocker sur le disque essayer de suivre les étapes suivantes:

  • Vérifier la valeur de max_heap_table_size variables
  • Vérifier la valeur de tmp_table_size variables
  • Vérifiez la pourcentage des tables de disques parmi toutes les tables temporaires. Il suffit de comparer show global status like 'Created_tmp_%tables' ces deux nombres. Si le pourcentage n'est pas trop élevé, il n'y a pas de quoi s'inquiéter.
+0

Les valeurs de max_heap_table_size et tmp_table_size Quelles sont les bonnes/mauvaises valeurs? – Tom

+0

Cela dépend beaucoup de votre projet spécifique. Il n'y a donc pas de conseil général sur les valeurs. La seule chose que je peux suggérer: il suffit d'éviter les tables temporaires sur disque. – Vadim

Questions connexes