MySQL : détecter et lister les tables fragmentées

Boris HUISGEN October 28, 2010

administration base de données mysql

Suite aux opérations d’écriture, les tables de données peuvent se fragmenter et occuper plus d’espace que nécessaire.

La requête suivante permet de lister les tables fragmentées, que le moteur de stockage soit MyISAM ou InnoDB :

SELECT CONCAT(TABLE_SCHEMA, '.', TABLE_NAME) AS Name,Data_free FROM information_schema.TABLES WHERE TABLE_SCHEMA NOT IN ('information_schema','mysql') AND Data_free > 0;

Vous pouvez ensuite optimiser chaque table par une requête OPTIMIZE.

Exemple :

mysql >SELECT CONCAT(TABLE_SCHEMA, '.', TABLE_NAME) AS Name,Data_free FROM information_schema.TABLES WHERE TABLE_SCHEMA NOT IN ('information_schema','mysql') AND Data_free > 0;

+------------------------------------------------+-----------+
| Name                                           | Data_free |
+------------------------------------------------+-----------+
| my_blog.wp_options                             |       384 |
+------------------------------------------------+-----------+
1 row in set (1.36 sec)

mysql> OPTIMIZE TABLE my_blog.wp_options;

+-----------------------+----------+----------+----------+
| Table                 | Op       | Msg_type | Msg_text |
+-----------------------+----------+----------+----------+
| my_blog.wp_options    | optimize | status   | OK       |
+-----------------------+----------+----------+----------+
1 row in set (0.00 sec)

See also

MySQL : activer le mode lecture seule
Read more
MySQL : gestion du cache de requêtes
Read more
Mac OS X : installation de Nginx / PHP / MySQL
Read more