Существенная разница между размером базы данных под MySQL и фактическим размером на диске

dba.stackexchange https://dba.stackexchange.com/questions/11567

  •  16-10-2019
  •  | 
  •  

Вопрос

Когда я проверяю размер моих баз данных под 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;

На столах, которые становятся слишком большими, чтобы восстановить дисковое пространство.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с dba.stackexchange
scroll top