différence substantielle entre la taille de la base de données sous MySQL et la taille réelle sur le disque
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)
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.