Comment utiliser Mytop pour surveiller les performances de MySQL

introduction

Mytop est un outil en ligne de commande open source utilisé pour surveiller les performances de MySQL. Il a été inspiré par l’outil de surveillance du système Linux nommé top et présente un aspect similaire. Mytop se connecte à un serveur MySQL et exécute périodiquement les commandes + show processlist + et + show global status +. Il résume ensuite les informations dans un format utile. En utilisant mytop, nous pouvons surveiller (en temps réel) les threads, les requêtes et le temps de disponibilité de MySQL, ainsi que voir quel utilisateur exécute des requêtes sur quelle base de données, quelles sont les requêtes lentes, etc. Toutes ces informations peuvent être utilisées pour optimiser les performances du serveur MySQL.

Dans ce tutoriel, nous expliquerons comment installer, configurer et utiliser mytop.

Conditions préalables

Avant de commencer avec ce tutoriel, vous devriez avoir les éléments suivants:

Étape 1 - Installation de Mytop

Laissez-nous installer les paquets requis pour mytop.

Premièrement, nous devons installer le référentiel yum EPEL (Extra Packages for Enterprise Linux) sur le serveur. EPEL est un groupe d’intérêt spécial de Fedora qui crée, met à jour et gère un ensemble de logiciels de haute qualité add-on open source de haute qualité pour Enterprise Linux. Exécutez la commande suivante pour installer et activer le référentiel EPEL sur votre serveur:

Sur CentOS 7:

sudo rpm -ivh http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm

Sur CentOS 6:

sudo rpm -ivh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

Avant de continuer, vérifiez que le référentiel EPEL est activé en utilisant:

sudo yum repolist

Si activé, vous verrez le référentiel suivant répertorié dans la sortie:

epel/x86_64                                                            Extra Packages for Enterprise Linux 7 - x86_64

Ensuite, protégeons les paquets de base d’EPEL en utilisant le plugin yum * protectbase *.

sudo yum install yum-plugin-protectbase.noarch -y

Le plugin * protectbase * a pour but de protéger certains référentiels yum des mises à jour d’autres référentiels. Les packages des référentiels protégés ne seront ni mis à jour ni remplacés par des packages de référentiels non protégés, même si le référentiel non protégé a une version ultérieure.

Nous sommes maintenant prêts à installer le paquet mytop. Exécutez la commande suivante pour l’installer:

sudo yum install mytop -y

Cela installera le paquet mytop ainsi que toutes ses dépendances, principalement des modules perl.

Étape 2 - Configuration de Mytop

Avant d’utiliser mytop, créez un fichier de configuration personnalisé pour mytop nommé + .mytop +. Exécutez la commande:

sudo nano /root/.mytop

et ajoutez le contenu suivant dans le fichier, puis enregistrez et quittez.

/root/.mytop

host=localhost
db=mysql
delay=5
port=3306
socket=
batchmode=0
color=1
idle=1

Ce fichier de configuration sera utilisé lorsque vous exécuterez mytop directement en tant que root et que vous l’exécuterez avec la commande + sudo + devant lui en tant qu’utilisateur sudo non root.

Vous pouvez modifier ce fichier de configuration en fonction de vos besoins. Par exemple, l’option + delay + spécifie le délai en secondes entre les actualisations de l’affichage. Si vous souhaitez actualiser l’affichage mytop toutes les 3 secondes, vous pouvez éditer le fichier + / root / .mytop + en utilisant

sudo nano /root/.mytop

et changez ce qui suit:

/root/.mytop

delay=

Le paramètre + idle + spécifie s’il faut autoriser ou non les threads inactifs (en veille) à apparaître dans la liste sur l’écran d’affichage mytop. La valeur par défaut consiste à afficher les threads inactifs. Si les threads inactifs sont omis, l’ordre de tri par défaut est inversé afin que les requêtes les plus longues en cours d’exécution apparaissent en haut de la liste. Si vous souhaitez le faire, éditez le fichier + / root / .mytop + et changez le texte suivant:

/root/.mytop

idle=

Vous pouvez vous reporter aux pages de manuel de mytop pour obtenir des informations sur tous les paramètres du fichier de configuration. Il contient une description de chaque paramètre. Pour accéder à la page de manuel, utilisez la commande:

man mytop

Vous pouvez taper + q + pour quitter le manuel.

Étape 3 - Connexion à Mytop

Dans cette section, nous verrons comment se connecter à mytop et comment l’utiliser pour afficher les requêtes MySQL.

Mytop requiert des informations d’identification pour accéder à la base de données, laquelle peut être fournie via une invite, sur la ligne de commande ou stockée dans le fichier de configuration. Pour plus de sécurité, nous utiliserons l’option + - prompt + de mytop, qui demande le mot de passe à chaque fois. + Laissez-nous connecter à mytop en utilisant:

sudo mytop --prompt

et entrez le mot de passe root MySQL à l’invite. Vous pouvez également utiliser plusieurs arguments de ligne de commande avec la commande + mytop +. Veuillez vous référer à la page de manuel pour la liste complète. Par exemple, si vous souhaitez utiliser un autre utilisateur mysql tel que * sammy * pour vous connecter à mytop, exécutez la commande suivante:

sudo mytop -u sammy --prompt

Pour connecter et surveiller uniquement une base de données spécifique, vous pouvez utiliser la commande:

sudo mytop -d  --prompt

Pour quitter mytop et revenir à l’invite de votre shell, tapez + q +.

Étape 4 - Visualiser et interpréter l’affichage Mytop

Dans cette section, nous verrons comment interpréter l’affichage mytop et les différentes fonctionnalités offertes par l’outil.

Une fois que nous nous connectons à mytop en utilisant + mytop --prompt +, nous serons redirigés vers la * vue de thread *. Il montrera quelque chose de similaire à:

Output of mytopMySQL on localhost (5.5.41-MariaDB)                    up 0+00:05:52 [01:33:15]
Queries: 148  qps:    0 Slow:     0.0         Se/In/Up/De(%):    09/00/00/00
            qps now:    2 Slow qps: 0.0  Threads:    6 (   5/   0) 67/00/00/00
Key Efficiency: 2.0%  Bps in/out:  14.7/320.7k   Now in/out: 192.5/731.8k

     Id      User         Host/IP         DB      Time    Cmd Query or State
      --      ----         -------         --      ----    --- ----------
       2      root       localhost      mysql         0  Query show full processlist
      16      root       localhost                    0  Sleep
      17      root       localhost     testdb         0  Query SELECT * FROM dept_emp
      18      root       localhost     testdb         0  Query SELECT * FROM dept_emp
      19      root       localhost     testdb         0  Query SELECT * FROM dept_emp
      20      root       localhost     testdb         0  Query SELECT * FROM dept_emp

Vous pouvez revenir à cette vue si vous êtes dans une autre vue en tapant + t +.

L’écran d’affichage ci-dessus est divisé en deux parties. Les quatre lignes du haut comprennent l’en-tête * que vous pouvez activer ou désactiver en appuyant sur * SHIFT-H *. L’en-tête contient des informations récapitulatives sur votre serveur MySQL.

  • La première ligne identifie le nom d’hôte du serveur et la version de MySQL sur laquelle il est exécuté. Le côté droit indique la disponibilité du processus serveur MySQL en format jours + heures: minutes: secondes ainsi que l’heure actuelle.

  • La deuxième ligne affiche le nombre total de requêtes traitées par le serveur (148 dans notre cas), le nombre moyen de requêtes par seconde, le nombre de requêtes lentes et le pourcentage de requêtes de sélection, insertion, mise à jour et suppression.

  • La troisième ligne affiche les valeurs en temps réel depuis la dernière actualisation de mytop. Le temps normal d’actualisation (délai) pour mytop est de 5 secondes. Par conséquent, si 100 requêtes ont été exécutées au cours des 5 dernières secondes depuis l’actualisation, le nombre + qps maintenant + serait de 20. Le premier champ est le nombre de requêtes par seconde (+ qps now: 2 +). La deuxième valeur est le nombre de requêtes lentes par seconde. Le segment + Threads: 6 (5/0) + indique qu’il y a un total de 6 threads connectés, 5 sont actifs (un est en veille) et qu’il y a 0 thread dans le cache de thread. Le dernier champ de la troisième ligne indique les pourcentages de la requête, comme dans la ligne précédente, mais depuis la dernière actualisation de mytop.

  • La quatrième ligne affiche l’efficacité du tampon de clé (la fréquence à laquelle les clés sont lues à partir du tampon plutôt que sur le disque) et le nombre d’octets envoyés et reçus par MySQL, à la fois globalement et lors du dernier cycle mytop. + Key Efficiency: 2.0% + indique que 2% des clés sont lues à partir de la mémoire tampon, pas à partir du disque. + Bps in / out: 14.7 / 320.7k + indique que depuis le démarrage de MySQL, le trafic entrant est en moyenne de 14,7 kbps et de 320,7 kbps pour le trafic sortant. + Now in / out + affiche à nouveau le trafic, mais depuis la dernière actualisation de mytop.

La deuxième partie de l’affichage répertorie les threads MySQL actuels, classés en fonction de leur temps d’inactivité (le moins d’inactivité en premier). Vous pouvez inverser l’ordre de tri en appuyant sur * O * si nécessaire. Identifiant du thread, nom d’utilisateur, hôte à partir duquel l’utilisateur se connecte, base de données à laquelle l’utilisateur est connecté, nombre de secondes d’inactivité, la commande en cours d’exécution du thread (ou l’état du thread) et première partie de la requête. les infos sont toutes affichées ici. Si le fil est dans un état * Query * (c’est-à-dire. + Cmd + affiche * Query *), la colonne suivante + Query ou State + affiche la première partie de la requête en cours d’exécution. Si l’état de la commande est * Sleep * ou * Idle *, la colonne + Requête ou État + sera généralement vide. Dans notre exemple de sortie ci-dessus, le fil portant l’id * 2 * correspond en fait à mytop qui exécute la requête + show processlist + pour collecter des informations. Le thread portant l’id * 16 * est en veille (il ne traite pas de requête, mais reste connecté). Le fil portant l’id * 17 * exécute une requête SELECT sur la base de données * testdb *.

Maintenant que nous avons compris l’affichage de base de mytop, nous allons voir comment l’utiliser pour collecter plus d’informations sur les threads et les requêtes MySQL. Jetons un coup d’oeil à l’affichage suivant mytop:

[secondary_output Output of mytop]
MySQL on localhost (5.5.41-MariaDB)                    up 0+00:13:10 [23:54:45]
Queries: 2.8k   qps:    4 Slow:    51.0         Se/In/Up/De(%):    45/00/00/00
            qps now:   17 Slow qps: 0.0  Threads:   52 (  51/   0) 96/00/00/00
Key Efficiency: 100.0%  Bps in/out: 215.4/ 7.6M   Now in/out:  2.0k/16.2M

     Id      User         Host/IP         DB      Time    Cmd Query or State
      --      ----         -------         --      ----    --- ----------
      34      root       localhost     testdb         0  Query show full processlist
    1241      root       localhost                    1  Sleep
    1242      root       localhost     testdb         1  Query SELECT * FROM dept_emp
    1243      root       localhost     testdb         1  Query SELECT * FROM dept_emp
    1244      root       localhost     testdb         1  Query SELECT * FROM dept_emp
    1245      root       localhost     testdb         1  Query SELECT * FROM dept_emp
    1246      root       localhost     testdb         1  Query SELECT * FROM dept_emp
    1247      root       localhost     testdb         1  Query SELECT * FROM dept_emp

Dans la vue thread * mytop * (vue par défaut) indiquée ci-dessus, les requêtes sont tronquées. Pour afficher la requête complète, vous pouvez appuyer sur * F *, et il vous demandera:

Full query for which thread id:

Entrez l’ID de thread pour la requête que vous voulez voir. Par exemple, entrez + 1244 +. Ensuite, il montrera ce qui suit:

Thread 1244 was executing following query:

SELECT * FROM dept_emp WHERE ...

-- paused. press any key to resume or (e) to explain --

Nous pouvons taper + e + pour expliquer la requête. Cela expliquera la requête en cours afin que nous puissions déterminer si la requête est optimisée. EXPLAIN est l’un des outils les plus puissants pour comprendre et optimiser les requêtes fastidieuses de MySQL. Par exemple:

EXPLAIN SELECT * FROM dept_emp:

*** row 1 ***
         table:  dept_emp
          type:  ALL
 possible_keys:  NULL
           key:  NULL
       key_len:  NULL
           ref:  NULL
          rows:  332289
         Extra:  NULL
-- paused. press any key to resume --

Vous pouvez appuyer sur n’importe quelle touche pour quitter ce mode ou taper + t + pour revenir à la vue par défaut du fil.

Une autre vue utile disponible dans mytop est la vue de commande. Pour accéder à la vue des commandes, tapez + c +. Cela ressemblera à ce qui suit:

          Command      Total  Pct  |  Last  Pct
          -------      -----  ---  |  ----  ---
           select       1782  55%  |   100   8%
      show status        723  22%  |   533  45%
 show processlist        708  22%  |   532  45%
        change db          2   0%  |     0   0%
   show variables          1   0%  |     0   0%
      Compression          0   0%  |     0   0%

La colonne + Command + indique le type de commande ou de requête en cours d’exécution. La colonne + Total + représente le nombre total de commandes de ce type exécutées depuis le démarrage du serveur, et la colonne + Pct + indique le même pourcentage. De l’autre côté de la ligne verticale se trouve la colonne + Last + qui indique le nombre de commandes de ce type exécutées depuis le dernier rafraîchissement de mytop. Ces informations nous donnent un aperçu de ce que fait le serveur MySQL à court et à long terme.

Nous avons présenté certaines des fonctionnalités importantes et utiles de mytop dans ce didacticiel. Il y en a beaucoup d’autres disponibles. Pour afficher une liste complète d’options, vous pouvez appuyer sur la touche *? * Pendant l’exécution de mytop.

Conclusion

Vous devriez maintenant bien comprendre comment utiliser mytop pour surveiller votre serveur MySQL. C’est également un point de départ pour rechercher et optimiser les requêtes SQL problématiques, augmentant ainsi les performances globales du serveur. Pour plus d’informations sur l’optimisation des requêtes et des tables MySQL sur votre serveur, consultez la page https://www.digitalocean.com/community/tutorials/how-to-optimize-queries-and-tables-in-mysql-and-mariadb. -on-a-vps [ce tutoriel].

Related