По какой-то причине все таблицы InnoDB на моем сервере MySQL отображаются как фрагментированные, когда я запускаю mysqltuner. Я установил сервер всего несколько часов назад (на OSX Lion), и на нем есть куча свежих данных, импортированных из пакетных файлов.
Я попытался преобразовать все таблицы в одной базе данных в MYISAM, и, конечно же, количество фрагментированных таблиц уменьшилось. Как ни странно, как только я преобразовал эти таблицы обратно в InnoDB, количество фрагментированных таблиц снова увеличилось. Это противоречит моим исследованиям, которые показывают, что бег ALTER TABLE table_name ENGINE=INNODB;
должен исправить фрагментацию.
После небольшого поиска в Google я побежал:
SELECT table_schema, table_name, data_free/1024/1024 AS data_free_MB
FROM information_schema.tables
WHERE engine LIKE 'InnoDB' AND data_free > 0
Который предположительно перечисляет все фрагментированные таблицы (он действительно возвращает то же количество результатов, что и выходные данные mysqltuner для счетчика фрагментированных таблиц). Каждая запись имеет одинаковый номер в data_free_MB
столбце (в настоящее время 7.00000000).
Это на самом деле реальная проблема или что-то делает mysqltuner неправильно? Если это проблема, как я могу это исправить?
РЕДАКТИРОВАТЬ
Я становлюсь все более и более подозрительным, что я идиот и что фрагментация 7 МБ предназначена для всего файла, а не для каждой таблицы. Кто-нибудь может подтвердить, так ли это?
[!!] Total fragmented tables: 2314
которое, я уверен, указывает на проблему (с двойными красными восклицательными знаками)