Comme vous l'avez déjà indiqué -innodb_file_per_table
décidera si une table sera stockée dans un fichier ou (si elle est partitionnée) dans plusieurs fichiers.
Voici quelques avantages et inconvénients de chaque approche (pas nécessairement une liste complète).
Single file per table Multiple files per (partitioned) table
-------------------------------------- --------------------------------------
+ System uses less filehandles - System uses more filehandles
+ One one fsync per second per table - Possibly many more fsync calls (bottleneck)
(less fs overhead (journal etc)) (more fs overhead)
+ Single file uses less space overall - Much larger disk space usage
- Single file fragments badly + Less fragmentation
- Optimize table (et al) takes longer + You can choose to optimize just one file
- One file = one filesystem + You can put heavy traffic files on a fast fs
(e.g. on a solid state disk)
- Impossible to reclaim disk space + possible to emergency-reclaim disk space
in a hurry (truncate table takes long) fast (just delete a file)
- ALTER TABLE can use large % of disk- + rebuilding with ALTER TABLE will use less
space for temp tables while rebuilding temp disk space
En général, je ne le ferais pas recommandons plusieurs fichiers.
Si toutefois votre charge de travail entraîne une forte fragmentation et optimize table
prend trop de temps, l'utilisation de plusieurs fichiers aura du sens.
Oubliez la récupération d'espace
Certaines personnes font beaucoup d'histoires sur le fait que dans InnoDB, les fichiers de table grandissent toujours et ne rétrécissent jamais, ce qui entraîne un gaspillage d'espace si des lignes sont supprimées.
Ensuite, ils proposent des schémas pour récupérer cet espace afin de pour ne pas manquer d'espace disque libre. (truncate table x
).
Cela fonctionnera beaucoup plus rapidement avec plusieurs fichiers, mais tout cela n'a aucun sens, car les bases de données grandissent presque toujours et (presque) ne rétrécissent jamais, donc toute cette récupération d'espace fera perdre beaucoup de temps (CPU et IO) pendant que votre table sera entièrement verrouillée (pas de lecture ni d'écriture autorisée).
Seulement pour constater que votre disque plein à 90 % (50 % après récupération) sera plein à 99 % après les ajouts de données du mois prochain.
Cependant, lorsque vous utilisez ALTER TABLE, méfiez-vous...
Considérez le scénario suivant :
- Le disque est plein à 60 %.
- La base de données occupe 50 %, les autres fichiers occupent 10 %.
Si vous effectuez une modification alter table
sur n'importe quelle table, vous manquerez d'espace disque si vous avez toutes les tables dans un seul fichier.
Si vous l'avez dans plusieurs fichiers, vous ne devriez pas avoir de problèmes (autre qu'une surdose de caféine à cause de toute cette attente).