Mysql 5.5 Дефрагментация не снижает процент фрагментации
Мы запускаем OPTIMIZE TABLE, но не видим снижения фрагментации. Они достигают 120% до 200%.
Я рассчитываю% фрагментации, используя это: Data_Free / (Data_Length + Index_Length)
В моих таблицах используется механизм INNODB, а для "innodb_file_per_table" установлено значение 1.
Что мне не хватает?
Что-то изменилось с Mysql 5.5+?
ТИА
2 ответа
"OPTIMIZE TABLE" предназначен только для таблиц MyISAM - InnoDB не страдает от "фрагментации", как таблицы MyISAM. Поэтому вам не нужно их оптимизировать.
Кроме того, ваш метод расчета неверен. Поскольку есть больше, чем просто данные + длина индекса.
ALTER TABLE table_name ENGINE=InnoDB; может использоваться в таблицах InnoDB для перестроения таблицы, очистки ее индексов и, в случае использования innodb_file_per_table=1, изменения размера файла таблицы.
Кроме того, innodb позаботится о себе, и любые замедления, которые вы можете испытать после выполнения этой команды, связаны с тем, что вы перестроили таблицу, проиндексированную по первичному ключу, и если вторичные ключи чаще используются при поиске в БД, вы их фрагментировали вместо.
InnoDB имеет тенденцию понимать разреженное хранение данных в файлах и, вероятно, его нужно "исправлять" гораздо реже, чем это делают некоторые люди.