MySQL. Pister les requêtes lentes

Problématique

Il faut toujours suivre la performance des requêtes d’une base de données. Au début, elle est toute petite et mignonne avec ses 250 entrées et toute requête même la plus lamentable a de bonnes performances. Mais, ouille, six mois après, on est passé à 2500000 entrées et là ça ne va plus du tout. J’exagère ? A peine.

Rien de tel que de mettre en place une surveillance en indiquant à MySQL de vous montrer les requêtes trop lentes par rapport à un seuil que vous pouvez fixer librement.

Solution

Nous avons vu dans les deux posts précédents comment trouver la valeur d’une variable globale et comment la modifier. Croyez-vous que c’était comme ça, pour rire, gratuitement ? Que nenni ! Avec un sens de la pédagogie qui, je le vois bien, vous laisse pantois, les bras ballants, il s’agissait de vous amener doucement à cette petite merveille.

Quatre variables globales sont concernées :

  • slow_query_log : positionné à ON, les requêtes longues sont enregistrées, à OFF elles ne le sont pas. Pour mettre à ON, on modifiera la valeur à 1. Et pour la mettre à OFF on fera comment ? Interro écrite demain matin.
  • slow_query_log_file : fichier de log, sa valeur par défaut est sous Ubuntu /var/run/mysqld/mysqld-slow.log
  • long_query_time : seuil en millisecondes au-delà duquel, vous considérez qu’une requête est trop longue. Sa valeur par défaut est de 10 ms. Je suggère 5 ms si vous voulez faire un examen approfondi quitte à remonter ce plafond ultérieurement
  • min_examined_row_limit : le nombre minimum de lignes que cette requête doit avoir examinées. Par exemple, si vous remontez d’un bloc un million de lignes (ça vous regarde …), il ne faut pas s’attendre à un temps de 0.1 ms. Vous avez déjà optimisé ce type de requête (la meilleure optimisation étant de les éviter), vous ne voulez plus les logger, vous pouvez donc mettre la valeur de cette variable à 500000.

Le plus couramment, on fera le changement suivant

mysql>SET GLOBAL slow_query_log=1;

mysql>SET GLOBAL long_query_time=10;

Et maintenant comment lirons-nous le résultat ? Sous le shell Ubuntu (ou autre), il suffira de taper la commande :

mysqldumpslow -verbose /var/run/mysqld/mysqld-slow.log (si vous n’avez pas changé le nom du fichier de log par défaut)

Ensuite, il n’y a plus qu’à optimiser si nécessaire

ET LE TOUR EST  JOUÉ !ALORS ON DIT MERCI QUI ?

Et pour une formation plus approfondie, une page sur les derniers livres parus sur MySQL sur DerniersParus.com

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *