différence substantielle entre la taille de la base de données sous MySQL et la taille réelle sur le disque

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

  •  16-10-2019
  •  | 
  •  

Question

Quand je vérifie la taille de mes bases de données sous MySQL j'obtenir ceci:

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 |
+--------------------+----------------------+------------------+

Quand je vérifie la taille sur le disque que j'obtiens ceci:

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

Si je combine à la fois utilisé et espace libre donné par Maria DB et le compare avec les chiffres de disque que je donne les résultats suivants:

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

Q: Est-il normal d'avoir beaucoup les frais généraux sur le disque / Est-ce que je peux faire pour le réduire

Pour votre information, je pensais courir un optimize mysql contribuerait ( en utilisant cette commande ), il a réduit la taille des bases de données, mais n'a pas changé la taille des fichiers sur le disque.

Informations complémentaires:

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)
Était-ce utile?

La solution

Si vous utilisez des tables InnoDB, la taille de vos fichiers ibdata va croître au fil du temps. Donc, si vous émettez déclaration DELETE, la taille de votre base de données réduira, mais le fichier ibdata restera le même (ne pas réduire).

Si vous n'utilisez pas l'option innodb_file_per_table, la seule façon de récupérer l'espace est la base de données par le dumping et la restauration du dumpfile.

Cependant, si vous utilisez innodb_file_per_table, vous pouvez émettre un

ALTER TABLE foo ENGINE=InnoDB;

sur les tables qui poussent trop grand pour récupérer l'espace disque.

Licencié sous: CC-BY-SA avec attribution
Non affilié à dba.stackexchange
scroll top