Audit MySQL – tmp_table_size & max_heap_table_size

mai 28, 2010

Je suis amené à réaliser régulièrement des audits de serveurs MySQL.Voici le premier volet d’une série d’articles où je vais essayer de vous donner quelques points clés pour mieux comprendre le fonctionnement de MySQL.

La configuration du serveur est un des points que je regarde, et l’une des erreurs les plus courantes concerne le paramétrage des options tmp_table_size et max_heap_table_size.

tmp_table_size permet de fixer la taille maximale au-delà de laquelle les tables temporaires en mémoire créées par MySQL (avec le moteur Memory) se transforment en table MyISAM en migrant les données sur le disque. max_heap_table_size permet de fixer la taille maximale des tables avec pour moteur de stockage Memory (Heap est l’ancien nom de Memory).
Extraits du livre « Audit et optimisation – MySQL 5; Bonnes pratiques pour l’administrateur »

Ce qui est important de savoir c’est que la limite des tables temporaires en mémoire créées par MySQL est la plus petite de ces deux valeurs. Ce que je vois souvent dans les fichier de configurations, c’est un tmp_table_size à 64 Mo (par exemple) et un max_heap_table_size qui lui n’y figure pas et qui par conséquent prend ça valeur par défaut, c’est à dire 16Mo. Votre table temporaire créée par le serveur (lors de votre GROUP BY par exemple) sera sur disque dès 16Mo de données et non 64 Mo comme vous le pensiez.
Alors pourquoi faut il limiter le nombre de tables temporaires créées sur le disque ? Tous simplement car sur disque, le temps d’exécution de la requête sera beaucoup, beaucoup plus long, de l’ordre de fois 10 voir fois 100 !
Lorsque vous renseignez l’option tmp_table_size, pensez également à donner la même valeur à l’option max_heap_table_size.

2 Responses to “Audit MySQL – tmp_table_size & max_heap_table_size”

  1. Bonjour,

    Un autre « truc » que l’on appris sur mysql au sujet des tables temporaires: il est quasiment impossible de toutes les passer en mémoire « via mysql ».

    En revanche il existe sous linux un système de fichier spécial (« tmpfs ») qui fonctionne en utilisant uniquement de la ram, beaucoup plus simple d’utilisation que ses ancetres, example:
    mount -t tmpfs -o size=4G,mode=1777 none /tmp

    L’usage de celui-ci sur des machines disposant de suffisament de mémoire permet de soulager simplement le système, même si ça ne rêgle pas tout les problèmes et de laisser souffler les disques.

  2. […] viaAudit MySQL – tmp_table_size & max_heap_table_size | dasini.net – Journal d’un…. Posted by PJ Michel at 22:02 Kogitae AE Administrateur Système Freelance Michel Pierre-Jacques 23 rue de la cornée 70800 Anjeux […]