Как вы уже заявили, -innodb_file_per_table
решит, будет ли одна таблица храниться в одном файле или (если разделена) во многих файлах.
Вот некоторые плюсы и минусы каждого подхода (необязательно полный список).
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
В общем, я бы не рекомендовал бы несколько файлов.
Однако если ваша рабочая нагрузка приводит к сильной фрагментации и optimize table
занимает слишком много времени, использование нескольких файлов будет иметь смысл.
Забудьте о возврате пространства
Некоторые люди суетятся из-за того, что файлы таблиц InnoDB всегда растут и никогда не сжимаются, что приводит к потере места при удалении строк.
Затем они придумали схемы, чтобы освободить это пространство, чтобы не было свободного места на диске. (truncate table x
).
Это будет работать намного быстрее с несколькими файлами, однако все это бессмысленно, потому что базы данных почти всегда растут и (почти) никогда не сжимаются, поэтому все, что освобождает пространство, будет тратить много времени (ЦП и IO) во время работы с вашей таблицей. полностью заблокирован (чтение и запись запрещены).
Только чтобы обнаружить, что ваш 90% заполненный диск (50% после восстановления) будет заполнен на 99% после добавления данных в следующие месяцы.
Однако при использовании ALTER TABLE будьте осторожны ...
Рассмотрим следующий сценарий:
- Диск заполнен на 60%.
- база данных занимает 50%, другие файлы - 10%.
Если вы введете alter table
для любой таблицы, вам не хватит места на диске, если у вас есть все таблицы в одном файле.
Если у вас есть это в нескольких файлах, у вас не должно быть проблем (кроме передозировки кофеина от всего этого ожидания).