Lorsque je vérifie la taille de mes bases de données sous MySQL, j'obtiens 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 |
+--------------------+----------------------+------------------+
Lorsque je vérifie la taille du disque, 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 l'espace utilisé et l'espace libre donné par Maria DB et que je le compare avec les chiffres du disque, j'ai ce qui suit:
alfresco: DB=279MB DISK=317MB (+14%)
drupal: DB=1100MB DISK=1433MB (+30%)
Q: Est-il normal d'avoir autant de surcharge sur le disque / Puis-je faire quelque chose pour le réduire?
Pour info, je pensais que l'exécution d'une optimisation mysql aiderait (en utilisant cette commande ), cela réduisait la taille des bases de données, mais ne changeait pas la taille des fichiers sur le disque.
Information additionnelle:
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)
Réponses:
Si vous utilisez des tables InnoDB, la taille de vos fichiers ibdata augmentera avec le temps. Donc, si vous
DELETE
émettez une instruction, la taille de votre base de données diminuera, mais le fichier ibdata restera le même (pas réduit).Si vous n'utilisez pas d'
innodb_file_per_table
option, la seule façon de récupérer l'espace est de vider la base de données et de restaurer à partir du fichier de vidage.Cependant, si vous utilisez
innodb_file_per_table
, vous pouvez émettre unsur des tables qui deviennent trop volumineuses pour récupérer l'espace disque.
la source
AlTER TABLE foo ENGINE=InnoDB
sansinnodb_file_per_table=1
ne rétrécit pas les ibdata.