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