2016-07-08 5 views
0

Я не могу освободить место в столах innodb.Проблема в оптимизации таблицы Innodb для освобождения свободного места

Я также установил innodb_files_per_table = 1, поэтому каждая таблица имеет отдельный файл ibd.

Когда я запрашиваю информацию_Schema для проверки размера данных, размера индекса и data_free, он всегда показывает некоторое значение, например 7Mb в столбце data_free для некоторых таблиц. Запрос:

ВЫБРАТЬ table_schema "Data Base Name", table_name (data_length + index_length)/1024/1024 "База данных Размер в МБ" (data_free)/ 1024/1024 "Свободное пространство в МБ" FROM information_schema.TABLES где table_schema = 'DB_NAME' заказать по 4 пределам пропуска 30;

бегает таблицу Оптимизировать также попытался альтер таблицы table_name двигатель = «InnoDB» но data_free все еще показывает 7Mb.

Я также включил innodb_stats_on_metadata, чтобы обновить статистику, а также выполнить флеш-таблицы и снова открыть таблицу, но все еще показывает 7Mb в data_free.

Любая идея, как я могу решить эту проблему свободного пространства?

+0

Это нормально на больших таблицах. InnoDB оставляет примерно 1/16 свободного места [заполняя страницы примерно до 15/16] (http://dev.mysql.com/doc/refman/5.7/en/innodb-physical-structure.html). Это не является признаком проблемы. –

+0

его не большой стол, он только 145 Мб таблицы .. , и я видел, что есть свободные места и на небольших столиках. Как и таблица 40Mb и свободное пространство 5Mb. –

+0

Извините, я должен был быть более ясным с моим случайным использованием слова «больше». Я сравнивал другие таблицы на вашем сервере - чем больше таблица, тем больше вероятность того, что вы увидите значительное свободное пространство. –

ответ

1

Да, 4M/5M/6M/7M «бесплатно» является нормальным для средних и больших таблиц InnoDB. И это обычно 4M-7M, независимо от размера стола. Вы не можете избавиться от этого. (Это особенно плохо для секционированных таблиц, поскольку это происходит на каждом разделе.) Какой процент пространства это?

Маленькие столы распределены по-другому, а обычно имеют менее 4 МБ свободного места.

15/16 не отображается нигде в информационной_схеме и не является большинством других видов «потерянного» пространства. 15/16 находится в каждом блоке и относится к тому, чтобы оставить дополнительное пространство, чтобы избежать резкого разделения блоков при вставке строк.

Различные категории «свободного» пространства в InnoDB существуют как оптимизация для улучшения времени отклика на запросы, за счет «потерянного» дискового пространства.