En este breve artículo voy a explicar cómo determinar rápidamente cuánto espacio en disco ocupa cada base de datos de un servidor MySQL, ejecutando una simple consulta SQL.



A veces necesitamos saber cuánto espacio ocupan las base de datos de un servidor MySQL. Puede ser, por ejemplo, para calcular qué espacio necesitaremos para hacer backups (copias de seguridad) durante un período de tiempo, o para monitorear el crecimiento de las bases de datos (si necesitamos dimensionar una nueva instalación o determinar la escalabilidad de un sistema o aplicación).

En MySQL es posible obtener esta información con una simple consulta:

select
    table_schema "DATABASE",
    convert(sum(data_length+index_length)/1048576,decimal(6,2)) "SIZE (MB)"
from
    information_schema.tables
where
    table_schema!="information_schema"
group by
    table_schema;

 

¿Qué hace esta consulta?

La tabla "tables" de la base de datos "information_schema" de MySQL posee información sobre todas las tablas del sistema, incluyendo el espacio que ocupan (en bytes) tanto sus datos como sus índices (si es que tiene). Cada fila de esta tabla representa una tabla, la cual incluye información acerca de la base de datos a la cual pertenece, y el tamaño que ocupa. La idea de la consulta es agrupar (group by) todas las tablas de una misma base de datos (columna table_schema), obteniendo (select) el nombre de la base de datos (table_schema) y el tamaño total (sum) que ocupa la suma de los datos más los índices (data_length+index_length) de cada tabla.

Para expresar las unidades en MB (mega bytes), divide el total por 1048576 (=1024*1024) y para dar formato trunca el resultado a dos decimales (convert(x,decimal(6,2))).

Ejemplo de ejecución de la consulta:

+----------------------------------+-----------+
| DATABASE                         | SIZE (MB) |
+----------------------------------+-----------+
| blog-linuxito_2012               |      1.59 |
| joomla27-2012                    |     10.32 |
| joomla-bd-testing                |      1.69 |
| joomla-db-desarrollo             |      2.27 |
| managementdb                     |      0.41 |
| mysql                            |      0.66 |
| producciondb                     |      0.77 |
| producciondb2                    |      0.27 |
| sitio-back-www-2012-10-05_full   |   1137.63 |
| sitio-back-www-2012-10-06_diff   |      0.06 |
| soft-2014                        |     37.42 |
| test_2009                        |      0.22 |
| test_pepito_www                  |      0.82 |
| test_joomla1.1                   |      0.11 |
| test_joomla-6.5912               |      2.46 |
| www1                             |    602.71 |
| www1logs                         |      0.23 |
| www2-test                        |      0.06 |
+----------------------------------+-----------+
18 rows in set (0.09 sec)

¡Espero que sea útil!


Tal vez pueda interesarte


Compartí este artículo