Iniciar sesión
Registrarse
He olvidado mi contraseña

¿Cómo liberar espación de disco en MySql?

Publicado el 02-11-2017


Un problema habitual en las base de datos es reclamar el espacio ocupado por los datos. Una situación contraintuitiva que se da a menudo, sobre todo en usuarios noveles, es que tras borrar datos de una base de datos el espacio ocupado en disco por los archivos de la base de datos. Esto es completamente normal, de hecho es una optimización, asignar espacio de disco a una base de datos es un proceso costoso y devolverlo también. Una vez asignado el espacio de disco a la base de datos se asume que aunque se borren datos este se volverá a utilizar y por lo tanto no se devuelve de manera automática (aunque algunas bases de datos permiten configurar esa ‘autodevolución’ de espacio, cosa que por lo general no es buena idea).

En MySql la situación no es diferente que en otras base de datos. Lo que voy a describir en este post es como reclamar este espacio. El procedimiento aquí descrito sirve para versiones relativamente modernas de MySql y para el gestor de tablas InnoDB.

El primer paso, obviamente es borrar los datos.

Una vez borrados los datos el comando OPTIMIZE TABLE es lo que necesitas. Ojo, este comando lo que hace es una copia completa de la tabla optimizando el espacio usado por la misma. Es decir si tenemos una tabla que ocupa N necesitaremos aproximadamente N – ESPACIO_LIBRE_EN_LA_TABLA para poder optimizarla y liberar espacio. Esto puede ser un serio problema si el disco está lleno hasta arriba.

Para saber cuanto espacio libre, y ocupado tenemos en nuestras tablas y por tanto cuanto podremos recuperar esta consulta es muy útil:

SELECT TABLE_SCHEMA, TABLE_NAME, DATA_FREE FROM INFORMATION_SCHEMA.TABLES
ORDER by DATA_FREE DESC

Espero que os sea útil.