Calcular tamaño de base de datos

En algunas ocasiones es necesario saber el tamaño que ocupa una base de datos MySQL en disco. Dicho tamaño suele no coincidir con lo que realmente ocupa en disco, ya que depende mucho de la configuración que se emplee.
Por ejemplo, el uso de la variable innodb_file_per_table hace que en disco ocupe más de lo que realmente debería por datos. Lo mismo sucede si alguna de las tablas está particionada. El uso de disco es mayor que la información que contiene.
Por lo tanto, para saber el tamaño que está ocupando en disco, se puede calcular sumando los valores que están registrados en la tabla TABLES de la base de datos information_schema.
mysql> SELECT table_schema "Base de datos",
       ROUND(SUM(data_length+index_length)/1024/1024,3) "Tamaño (MB)"
       FROM information_schema.TABLES
       GROUP BY table_schema;
+--------------------+-------------+
| Base de datos      | Tamaño (MB) |
+--------------------+-------------+
| CV                 |      75.046 |
| gastos_es          |       2.109 |
| information_schema |       0.008 |
| mysql              |       0.456 |
| crm                |      15.328 |
| drupal             |     272.688 |
| zabbix             |    9973.641 |
| extranet           |     838.567 |
+--------------------+-------------+
8 rows in set (1.04 sec)
Durante el trabajo diario de MySQL (select, insert, delete, etc.) se van produciendo 'huecos' vacíos en las tablas, lo que provoca una pérdida de espacio. En caso de que el tamaño libre sea considerable, entonces sí es buena idea optimizar la base de datos, para liberar ese espacio libre. MySQL tiene el comando optimize pensando justamente en esta tarea.
Una forma sencilla de saber el espacio libre es la que sigue,
mysql> SELECT table_schema "Base de datos", 
       sum( data_length + index_length ) / 1024 / 1024 "Tamaño (MB)", 
       sum( data_free )/ 1024 / 1024 "Espacio libre (MB)" 
       FROM information_schema.TABLES 
       GROUP BY table_schema;
+--------------------+-------------+--------------------+
| Base de datos      | Tamaño (MB) | Espacio libre (MB) |
+--------------------+-------------+--------------------+
| CV                 |      75.046 |        12.00000000 |
| gastos_es          |       2.109 |         0.00000000 |
| information_schema |       0.008 |         0.00000000 |
| mysql              |       0.456 |         0.00000000 |
| crm                |      15.328 |         9.00000000 |
| drupal             |     272.688 |        81.00000000 |
| zabbix             |    9973.641 |        22.00000000 |
| extranet           |     838.567 |        90.00000000 |
+--------------------+-------------+--------------------+
8 rows in set (9.20 sec)


No hay comentarios :

Publicar un comentario

Formulario de contacto

Nombre

Correo electrónico *

Mensaje *

Últimos comentarios