Mysql – значение Data_free в таблице нельзя уменьшить

У нас есть большая производственная таблица MySQL5.7. Пытаемся уменьшить значение Data_free.

Обычно мы просто запускаем команду «Оптимизировать» для различных таблиц базы данных, чтобы уменьшить ее до размера 7 МГ. Однако с одной таблицей нам этого добиться не удалось (мы используем innodb_file_per_table).

Есть ли способ заставить систему уменьшить значение до нормального размера?

показать статус таблицы

1 ответ

Вы используете ENGINE=InnoDB? Является ли рассматриваемая таблица секционированной?

MySQL InnoDB предварительно выделяет «экстенты» в ожидании вставки новых строк. Обычно (не всегда) это отображается как Data_free, равный ровно 4 МБ, 5 МБ, 6 МБ или 7 МБ. Вы не можете избавиться от этого.

Вы заметили, чтоOPTIMIZE TABLEредко сильно сжимает какую-либо таблицу? Вы заметили, что операция блокирует другие действия на столе? В общем, эта команда бесполезна для таблиц InnoDB.

Data_free — единственный видимый показатель «фрагментации» и другого «свободного» пространства. Не беспокойтесь об этом.

АPARTITIONed«Таблица» состоит из нескольких «таблиц», по одной на каждый раздел. Каждая подтаблица может иметь некоторый Data_free. Следовательно, вся секционированная таблица может иметь гораздо больший Data_free. Опять же, этот Data_free нельзя сжать (за исключением редких случаев).

Другие вопросы по тегам