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

Boris HUISGEN
Boris HUISGEN
|

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)
Boris HUISGEN
Boris HUISGEN
Blog owner
  • #mysql