Les utilisateurs de MySQL se demandent souvent comment savoir ce que fait réellement leur serveur à tout moment, généralement lorsque les choses commencent à ralentir ou à se comporter de manière étrange. Vous pouvez consulter les statistiques du système d'exploitation pour déterminer à quel point le serveur est occupé, mais cela ne révèle pas grand-chose. Savoir que le processeur est utilisé à 100 % ou qu'il y a beaucoup d'E/S de disque fournit une image de haut niveau de ce qui se passe, mais MySQL peut en dire beaucoup plus.
Plusieurs commandes SHOW fournissent une fenêtre sur ce qui se passe dans MySQL. Ils donnent accès aux variables de configuration de MySQL, aux statistiques en cours et aux compteurs, ainsi qu'à une description de ce que fait chaque client.
La commande SHOW VARIABLES
Le moyen le plus simple de vérifier que les modifications de configuration ont pris effet est de demander à MySQL ses paramètres de variables actuels. C'est exactement ce que fait la commande SHOW VARIBLES. Son exécution produit pas mal de sortie, qui ressemble à ceci :
mysql> SHOW VARIABLES;
+-------------------------------+-------------------+ | Variable_name | Value | +-------------------------------+-------------------+ | back_log | 20 | | basedir | mysql | | binlog_cache_size | 32768 | | character_set | latin1 | | concurrent_insert | ON | | connect_timeout | 5 | | datadir | /home/mysql/data/ |
La sortie continue à partir de là, couvrant plus de 600 variables au total. Les variables sont répertoriées par ordre alphabétique, ce qui est pratique pour la lecture, mais parfois les variables liées ne sont pas proches les unes des autres dans la sortie. La raison en est qu'à mesure que MySQL évolue, de nouvelles variables sont ajoutées avec des noms plus descriptifs, mais les anciens noms de variables ne sont pas modifiés ; cela romprait la compatibilité de tout programme qui les attend. Dans les rares cas où ils changent, MySQL conserve les anciens noms comme alias pour les nouveaux.
De nombreuses variables de la liste peuvent être ajustées par une entrée set-variable
dans n'importe quel fichier de configuration de MySQL. Certaines d'entre elles sont des valeurs compilées qui ne peuvent pas être modifiées. Ce sont vraiment des constantes (pas des variables), mais elles apparaissent toujours dans la sortie de SHOW VARIABLES. D'autres encore sont des drapeaux booléens.
Notez que la sortie de SHOW VARIABLES (et de toutes les commandes SHOW, d'ailleurs) ressemble à la sortie de n'importe quelle requête SQL. Ce sont des données tabulaires. MySQL renvoie la sortie dans un format structuré, ce qui facilite l'écriture d'outils capables de résumer et d'agir sur la sortie de ces commandes. Nous en ferons bon usage dans les chapitres suivants.
La command SHOW PROCESSLIST
L'autre commande SHOW que nous allons examiner est SHOW PROCESSLIST. Il génère une liste de ce que fait chaque thread au moment où vous exécutez la commande. Tous les threads n'apparaissent pas dans la sortie SHOW PROCESSLIST. Le thread qui gère les connexions réseau entrantes, par exemple, n'est jamais répertorié. C'est à peu près équivalent aux commandes ps ou top sous Unix ou au Gestionnaire des tâches sous Windows.
Son exécution produit une liste de processus sous forme de tableau :
mysql> SHOW PROCESSLIST;
+----+---------+-----------+------+-------------+------+-------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+---------+-----------+------+-------------+------+-------+------------------+
| 17 | root | localhost | wp5x | Query | 0 | NULL | show processlist |
+----+---------+-----------+------+-------------+------+-------+------------------+
Il est courant que les colonnes State
et Info
contiennent plus d'informations qui produisent des lignes suffisamment longues pour s'afficher à l'écran. C'est donc une bonne idée d'utiliser l'échappement \G dans l'interpréteur de commandes mysql pour produire une sortie verticale plutôt qu'une sortie horizontale :
mysql> SHOW PROCESSLIST \G
*************************** 1. row ***************************
Id: 17
User: root
Host: localhost
db: wp5x
Command: Query
Time: 0
State: NULL
Info: show processlist
Quelle que soit la façon dont vous le regardez, les mêmes champs sont inclus :
Id |
Numéro qui identifie de manière unique ce processus. Étant donné que MySQL est un serveur multi-thread, il identifie réellement le thread (ou la connexion) et n'est pas lié aux ID de processus que le système d'exploitation peut utiliser. Comme le système d'exploitation le fait avec les processus, MySQL commence à numéroter les threads à 1 et attribue à chaque nouveau thread un identifiant supérieur d'une unité à celui du thread précédent. |
User |
Le nom de l'utilisateur MySQL connecté à ce thread. |
Host |
Le nom de le host ou l'adresse IP à partir de laquelle l'utilisateur est connecté. |
db |
La base de données actuellement sélectionnée. Cela peut être NULL si l'utilisateur n'a pas spécifié de base de données. |
Command |
Cela montre l'état de la commande (du point de vue interne de MySQL) dans lequel se trouve actuellement le thread. Les commandes correspondent à peu près à divers appels de fonction dans l'API C de MySQL. De nombreuses commandes représentent des actions de très courte durée. Deux de ceux qui ne le font pas, |
Time |
Le nombre de secondes pendant lesquelles le processus a exécuté la commande actuelle. Un processus avec un temps de 90 et une commande de veille a été inactif pendant une minute et demie. |
State |
Informations supplémentaires lisibles par l'homme sur l'état de ce fil de discussion. Voici un exemple : Slave connection: waiting for binlog update Ceci apparaît sur le serveur maître lorsqu'un esclave se réplique activement à partir de celui-ci. |
Info |
Il s'agit du SQL réel en cours d'exécution, le cas échéant. Seuls les 100 premiers caractères sont affichés dans la sortie de SHOW PROCESSLIST. Pour obtenir le SQL complet, utilisez SHOW FULL PROCESSLIST. |
La commande SHOW STATUS
En plus de toutes les informations variables que nous pouvons interroger, MySQL garde également une trace de nombreux compteurs et statistiques utiles. Ces chiffres suivent la fréquence à laquelle divers événements se produisent. La commande SHOW STATUS produit une liste tabulaire de toutes les statistiques et de leurs noms.
Pour confondre un peu les choses, MySQL fait également référence à ces compteurs en tant que variables. Dans un sens, ce sont des variables, mais ce ne sont pas des variables que vous pouvez définir. Ils changent au fur et à mesure que le serveur s'exécute et gère le trafic ; il vous suffit de les lire et de les réinitialiser à l'aide de la commande FLUSH STATUS.
La commande SHOW STATUS, cependant, offre beaucoup d'informations sur les performances de votre serveur.
La command SHOW INNODB STATUS
La commande d'état SHOW INNODB STATUS fournit un certain nombre de statistiques spécifiques à InnoDB. Comme nous l'avons dit précédemment, InnoDB est l'un des moteurs de stockage de MySQL.
La sortie de SHOW INNODB STATUS est différente de celle de SHOW STATUS en ce sens qu'elle se lit davantage comme un rapport textuel, avec des en-têtes de section et autres. Différentes sections du rapport fournissent des informations sur les sémaphores, les statistiques de transaction, les informations de tampon, les journaux de transaction, etc.
SHOW INNODB STATUS est traité plus en détail avec SHOW STATUS dans l'annexe A. Notez également que dans une future version de MySQL, cette commande sera remplacée par une commande SHOW ENGINE STATUS plus générique.