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:
-
DropOS 64 bits CentOS 7 (fonctionne également avec CentOS 6)
-
Utilisateur non root avec privilèges sudo. Pour configurer un utilisateur de ce type, suivez le tutoriel Initial Server Initial with CentOS 7. Toutes les commandes seront exécutées sous cet utilisateur.
-
Serveur MySQL s’exécutant sur le droplet. Pour installer MySQL, suivez l’étape 2 de la How Installer des piles Linux, Apache, MySQL, PHP (LAMP) sur CentOS.
É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].