Cette page est une documentation originale PmaControl. Elle reprend une structure d'index pratique pour travailler sur l'optimisation MySQL, sans copier de contenu tiers ni dépendre d'un produit externe.
Objectif
Un health check MySQL vérifie l'état exploitable du serveur: disponibilité, capacité, cohérence des limites, absence de signaux critiques et qualité minimale de configuration.
Contrôles essentiels
- Uptime et redémarrages récents.
- Saturation de connexions par rapport à
max_connections. - Ratio de lectures disque du buffer pool.
- Volume de tables temporaires créées sur disque.
- Erreurs de connexion et
Aborted_clients. - Verrous longs, deadlocks et requêtes en attente.
- Espace disque des datadir, logs binaires et logs redo.
SQL de base
SHOW GLOBAL STATUS LIKE 'Uptime';
SHOW GLOBAL STATUS LIKE 'Max_used_connections';
SHOW GLOBAL STATUS LIKE 'Created_tmp_disk_tables';
SHOW ENGINE INNODB STATUS\G
Interprétation
Le health check ne doit pas seulement produire une liste rouge/verte. Il doit expliquer l'impact, la priorité et la manière de confirmer le diagnostic.
Commencer par l’identité et un instantané récent
Consignez le nom d’hôte, la version, le rôle, l’heure d’observation et l’impact applicatif. Vérifiez le trajet complet, de l’application au proxy puis à la base : une connexion SQL réussie ne prouve pas que les clients atteignent le bon serveur d’écriture. Identifiez la dernière période saine et corrélez les redémarrages avec déploiements, événements système et journal d’erreurs.
SELECT NOW() AS observed_at, @@hostname AS hostname,
VERSION() AS server_version, @@global.read_only AS read_only;
SHOW GLOBAL VARIABLES WHERE Variable_name IN (
'max_connections', 'datadir', 'tmpdir', 'log_error'
);
SHOW GLOBAL STATUS WHERE Variable_name IN (
'Uptime', 'Threads_connected', 'Threads_running',
'Max_used_connections', 'Connection_errors_max_connections',
'Aborted_clients', 'Aborted_connects', 'Innodb_log_waits',
'Innodb_buffer_pool_reads', 'Innodb_buffer_pool_read_requests',
'Created_tmp_tables', 'Created_tmp_disk_tables'
);
Lire les débits et la pression, pas les totaux isolés
Pour les compteurs croissants, utilisez deux relevés sur le même intervalle sans interruption. Fraction des lectures physiques = ΔInnodb_buffer_pool_reads / ΔInnodb_buffer_pool_read_requests si le dénominateur est positif. Elle décrit les lectures absentes du buffer pool, pas la santé du stockage ; comparez aussi lectures physiques par seconde et latence disque. Max_used_connections est un maximum depuis remise à zéro, Threads_connected une valeur actuelle. Les connexions dormantes et le travail actif ont des coûts différents.
Le ratio des tables temporaires disque est un indice seulement. Le débordement TempTable MySQL dans des fichiers mappés n’est pas entièrement représenté par Created_tmp_disk_tables ; un faible ratio ne prouve pas que tout reste en RAM. Une hausse des connexions interrompues exige des preuves applicatives, réseau et de timeout avant de conclure à un défaut de la base.
Inspecter transactions, réplicas et système
SELECT trx_id, trx_state, trx_started, trx_mysql_thread_id,
trx_rows_locked, trx_rows_modified
FROM information_schema.innodb_trx
ORDER BY trx_started
LIMIT 20;
SHOW ENGINE INNODB STATUS\G
Une transaction ancienne peut être inactive tout en conservant des verrous ou en retardant la purge. Identifiez son propriétaire et son opération métier avant de l’arrêter ; son rollback peut être long. Sur un réplica MySQL 8.0.22+, examinez SHOW REPLICA STATUS\G : réception, application, dernières erreurs et retard. MariaDB et les anciennes versions MySQL utilisent des commandes et champs propres à leur version. Un retard nul ne garantit pas la fraîcheur ; vérifiez un repère applicatif et chaque canal configuré.
df -h /var/lib/mysql
df -i /var/lib/mysql
vmstat 1 5
Remplacez le chemin d’exemple par le datadir réel et contrôlez les montages distincts des fichiers temporaires et binlogs. Examinez octets libres, inodes, latence I/O, pression mémoire et activité du swap. Excluez le premier relevé vmstat des comparaisons d’intervalle. Confirmez les sauvegardes par une restauration réussie, un temps de reprise mesuré et le point de reprise requis, pas seulement par un job terminé.
Prioriser les constats
| Signal | Action suivante |
|---|---|
| Serveur d’écriture indisponible ou disque plein | Reprise immédiate, conserver les preuves |
| Erreurs, attentes ou retard en hausse | Corréler avec l’impact client actuel |
| Maximum historique sans pression actuelle | Suivi de tendance et revue de capacité |
Poursuivre le diagnostic
- Utilisez l’évaluation de performance pour noter responsable, preuves et prochaine revue.