Когда я проверяю размер моих баз данных под 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
Если я объединю как использованное, так и свободное пространство, предоставленное Maria DB, и сравню его с данными на диске, я получу следующее:
alfresco: DB=279MB DISK=317MB (+14%)
drupal: DB=1100MB DISK=1433MB (+30%)
В: Это нормально, когда на диске столько накладных расходов? Могу ли я что-нибудь сделать, чтобы уменьшить его?
К вашему сведению, запуск mysql optimize поможет ( с помощью этой команды ), он уменьшил размер баз данных, но не изменил размер файлов на диске.
Дополнительная информация:
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
безinnodb_file_per_table=1
сокращений ибдаты.