Diferencia sustancial entre el tamaño de la base de datos bajo MySQL y el tamaño real en el disco

dba.stackexchange https://dba.stackexchange.com/questions/11567

  •  16-10-2019
  •  | 
  •  

Pregunta

Cuando reviso el tamaño de mis bases de datos en MySQL, obtengo esto:

MariaDB [(none)]> SELECT table_schema "Data Base Name",  sum( data_length + index_length ) / 1024 /  1024 "Data Base Size in MB",  sum( data_free )/ 1024 / 1024 "Free Space in MB"  FROM information_schema.TABLES  GROUP BY table_schema;
+--------------------+----------------------+------------------+
| Data Base Name     | Data Base Size in MB | Free Space in MB |
+--------------------+----------------------+------------------+
| alfresco           |         245.75000000 |      34.00000000 |
| drupal             |         892.15625000 |     216.00000000 |
+--------------------+----------------------+------------------+

Cuando reviso el tamaño del disco, obtengo esto:

$ sudo du -h --max-depth=1 /var/lib/mysql/
317M    /var/lib/mysql/alfresco
1.4G    /var/lib/mysql/drupal

Si combino espacio usado y libre dado por Maria DB y lo comparo con las cifras de disco, tengo lo siguiente:

alfresco: DB=279MB  DISK=317MB (+14%)
drupal: DB=1100MB   DISK=1433MB (+30%)

P: ¿Es normal tener tanta sobrecarga en el disco / ¿Hay algo que pueda hacer para reducirlo?

Para su información, pensé que ejecutar una optimización mysql ayudaría (Usando ese comando), redujo el tamaño de las bases de datos, pero no cambió el tamaño de los archivos en el disco.

Información adicional:

server:             ubuntu server 10.04 LTS
DB server:          MariaDB
DB engine:          InnoDB v10 (for all tables)
Table collation:    utf8_general_ci
Nb Drupal tables:   416  (0.80MB overhead per table)
Nb Alfresco tables: 84   (0.45MB overhead per table)
¿Fue útil?

Solución

Si está utilizando tablas innoDB, el tamaño de sus archivos IBData crecerá con el tiempo. Entonces, si emites DELETE Declaración, el tamaño de su base de datos se reducirá, pero el archivo IBData seguirá siendo el mismo (no reducir).

Si no esta usando innodb_file_per_table Opción, la única forma de reclamar el espacio es descargar la base de datos y restaurar desde el archivo de basura.

Sin embargo, si estás usando innodb_file_per_table, puedes emitir un

ALTER TABLE foo ENGINE=InnoDB;

en tablas que crecen demasiado para reclamar el espacio del disco.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a dba.stackexchange
scroll top