22
0
Fork 0

Ajout Lister les tables fragmentés

This commit is contained in:
emorino 2020-02-05 15:39:58 +01:00
parent da651fa1b0
commit 1d020da88c
1 changed files with 27 additions and 1 deletions

View File

@ -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.
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.