Saltar al contenido

Cálculo del uso de espacio en disco por base de datos MySQL

Hola, descubrimos la respuesta a lo que andabas buscando, desplázate y la encontrarás a continuación.

Solución:

Hay 3 escenarios.

  1. Si está utilizando MyISAM, es más fácil mirar el sistema de archivos y usar du -sh /var/lib/mysql/database.
  2. Si está utilizando InnoDB con el conjunto innodb_file_per_table, entonces puede obtener una respuesta aproximada usando du -sh. Es aproximado porque todavía hay algunos datos almacenados en el archivo ibdata1, por lo que estará un poco bajo. Esta técnica también funciona con mixed MiISAM/InnoDB (innodb_file_per_table) bases de datos.
  3. Si está utilizando InnoDB sin innodb_file_per_table setentonces tendrá que buscar en INFORMATION_SCHEMA.

En cualquiera de los casos anteriores, puede ejecutar la siguiente consulta para obtener la información que está buscando.

mysql> select table_schema, sum((data_length+index_length)/1024/1024) AS MB from information_schema.tables group by 1;
+--------------------+-----------------+
| table_schema       | MB              |
+--------------------+-----------------+
| prod               | 298025.72448921 |
| information_schema |      0.00781248 |
| maatkit            |     70.77330779 |
| mysql              |      0.66873168 |
| test               |   4752.31449127 |
+--------------------+-----------------+
5 rows in set (0.01 sec)

Si tiene una gran cantidad de tablas, puede ser lento, como ya ha descubierto.

Puede usar este comando para obtener información en GB:

mysql> select table_schema "DB name (table_schema)", 
sum((data_length+index_length)/1024/1024/1024) AS "DB size in GB" from 
information_schema.tables group by table_schema;
+-------------------------------------+-----------------+
| table_schema DB name (table_schema) | DB size in GB   |
+-------------------------------------+-----------------+
| prod                                |     29.72448921 |
| information_schema                  |      0.00781248 |
| miscDB                              |      0.77330779 |
| mysql                               |      0.66873168 |
| test                                |     47.31449127 |
+-------------------------------------+-----------------+
5 rows in set (0.01 sec)

Adaptó la respuesta de Aaron Brown para proporcionar el tamaño en GB. Consulte la respuesta de Aaron Brown para obtener más detalles.

O para incluir espacio gratuito/recuperable, utilice:

mysql> SELECT table_schema "database name",
sum( data_length + index_length ) / 1024 / 1024 "database size in MB",
sum( data_free )/ 1024 / 1024 "free reclaimable space in MB"
FROM information_schema.TABLES
GROUP BY table_schema; 

+--------------------+---------------+------------------------------+
| DB name            | DB size in GB | free/reclaimable space in GB |
+--------------------+---------------+------------------------------+
| prod               |          1.26 |                         0.03 |
| information_schema |         38.77 |                         3.75 |
| miscDB             |          0.00 |                         0.00 |
| mysql              |          0.00 |                         0.00 |
| test               |          0.00 |                         0.00 |
+--------------------+---------------+------------------------------+

El espacio se puede recuperar usando el comando OPTIMIZE TABLE para las tablas InnoDB, MyISAM y ARCHIVE.

Consulte también ¿Cómo obtener el tamaño real de la base de datos MySQL? para más detalles.

Para poder ver dónde se está utilizando el espacio en disco (independientemente de si está en una tabla mysql o no), utilizo mi confiable comando “du”. Aquí hay un ejemplo de mí encontrando de dónde se está comiendo todo el espacio.

$ sudo du -cks /* | sort -rn
954881224   total
945218092   /mysql
5299904 /usr
1781376 /opt
1166488 /var
671628  /home
343332  /run
213400  /root
93476   /lib
30784   /boot
20652   /etc
15940   /bin
13708   /sbin
12388   /tmp
24  /mnt
16  /lost+found
4   /srv
4   /snap
4   /media
4   /lib64
0   /vmlinuz
0   /sys
0   /proc
0   /initrd.img
0   /dev

Puede ver que la mayor parte del espacio está siendo utilizado por esta carpeta. /mysql

Esa carpeta contiene tablas de datos. Para ver qué mesas están ocupando todo el espacio, puede proceder así usando la opción “humano” o “-h”. Me gusta administrar el espacio en disco de esta manera porque a veces ni siquiera puede iniciar sesión en mysql porque no conoce la contraseña o el usuario.

$ sudo du -chs /mysql/*
2.3M    /mysql/blacklist
18M /mysql/clientservices
2.5G    /mysql/data
4.0K    /mysql/doubleverify
137G    /mysql/ias
4.0K    /mysql/IAS
2.2G    /mysql/innodb
16K /mysql/lost+found
4.0K    /mysql/ml_centroids
16G /mysql/moat
4.0K    /mysql/test
4.0K    /mysql/tmp
4.0K    /mysql/var
282G    /mysql/verticaAdFees
4.0K    /mysql/verticaViewability
247G    /mysql/Whiteops
217G    /mysql/Whiteops_TLX
902G    total

Puede ver que todo el espacio está siendo ocupado por unas pocas tablas que contienen muchos GiG de datos. Espero que esto ayude.

Finalizando este artículo puedes encontrar las interpretaciones de otros gestores de proyectos, tú asimismo eres capaz insertar el tuyo si dominas el tema.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *