Существенная разница между размером базы данных под MySQL и фактическим размером на диске
Вопрос
Когда я проверяю размер моих баз данных под MySQL, я получаю это:
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 |
+--------------------+----------------------+------------------+
Когда я проверяю размер на диске, я получаю это:
$ sudo du -h --max-depth=1 /var/lib/mysql/
317M /var/lib/mysql/alfresco
1.4G /var/lib/mysql/drupal
Если я комбинирую как использованное и свободное пространство, предоставленное Марией Д.Б., и сравните его с фигурами диска, у меня есть следующее:
alfresco: DB=279MB DISK=317MB (+14%)
drupal: DB=1100MB DISK=1433MB (+30%)
В: Нормально ли иметь столько накладных расходов на диск / Есть ли что -нибудь, что я могу сделать, чтобы уменьшить его?
К вашему сведению, я думал, что запуск оптимизации MySQL поможет (используя эту команду), это уменьшило размер баз данных, но не изменил размер файлов на диске.
Дополнительная информация:
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)
Решение
Если вы используете таблицы InnoDB, размер ваших файлов IBData со временем будет расти. Итак, если вы выпустите DELETE
Заявление, размер вашей базы данных уменьшится, но файл IBDATA останется прежним (не уменьшается).
Если вы не используете innodb_file_per_table
Вариант, единственный способ восстановить пространство - это сбросить базу данных и восстановить из файла дампа.
Однако, если вы используете innodb_file_per_table
, вы можете выпустить
ALTER TABLE foo ENGINE=InnoDB;
На столах, которые становятся слишком большими, чтобы восстановить дисковое пространство.