From 1d020da88c336841d5895b84892ab74b9a379c85 Mon Sep 17 00:00:00 2001 From: emorino Date: Wed, 5 Feb 2020 15:39:58 +0100 Subject: [PATCH] =?UTF-8?q?Ajout=20Lister=20les=20tables=20fragment=C3=A9s?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HowtoMySQL/Troubleshooting.md | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/HowtoMySQL/Troubleshooting.md b/HowtoMySQL/Troubleshooting.md index f4fe7e11..aef82a20 100644 --- a/HowtoMySQL/Troubleshooting.md +++ b/HowtoMySQL/Troubleshooting.md @@ -816,4 +816,30 @@ MariaDB > grant USAGE, PROCESS on *.* to foo@localhost; ## "incorrect key file" sur une table InnoDB -Si une action ou une réplication est bloquée avec le message `incorrect key file` et incitant à réparer la table, c'est une fausse piste (il n'y a pas de REPAIR sur les tables InnoDB). Il se peut que ça soit en fait un tmpdir insuffisant en espace disponible pour accueillir les données temporaires. Il faut alors passer sur un tmpdir plus important (`/home/mysql-tmpdir` par exemple). Attention, cela nécessite un redémarrage du service. \ No newline at end of file +Si une action ou une réplication est bloquée avec le message `incorrect key file` et incitant à réparer la table, c'est une fausse piste (il n'y a pas de REPAIR sur les tables InnoDB). Il se peut que ça soit en fait un tmpdir insuffisant en espace disponible pour accueillir les données temporaires. Il faut alors passer sur un tmpdir plus important (`/home/mysql-tmpdir` par exemple). Attention, cela nécessite un redémarrage du service. + +## Lister les tables fragmentés + +Souvent on execute un mysqltuner et celui ci indique que mysql contient des tables fragmentés, mais sans indiqués lequelles. + +Si on veux lister toutes les tables fragmenté d'une instance MySQL, on peux executer cette requête : + +~~~ +SELECT ENGINE, TABLE_NAME,Round( DATA_LENGTH/1024/1024) as data_length , round(INDEX_LENGTH/1024/1024) as index_length, round(DATA_FREE/ 1024/1024) as data_free from information_schema.tables where DATA_FREE > 0; +~~~ + +Cela liste les tables qui ont un différentiel entre al longeur des données et la longeur de l'index, et le nombre de données non utilisé dans chaque table (data_free) + +On peux égelement calculer le ratio d'espace non utilisé sur une table, exemple avec cette table `champ_supp_contact` : + +~~~ ++--------+---------------------------+-------------+--------------+-----------+ +| ENGINE | TABLE_NAME | data_length | index_length | data_free | ++--------+---------------------------+-------------+--------------+-----------+ +| InnoDB | champ_supp_contact | 30 | 27 | 29 | ++--------+---------------------------+-------------+--------------+-----------+ +~~~ + +On calcule le ratio de cette manière, (30 + 27) = 57 ; 29/57 = 0.5 + +C'est à dire que la table contient 50% d'espace vide. \ No newline at end of file