Когда я выполняю SHOW TABLE STATUS databaseName;
Я получаю информацию Data_free со значением 17825792 во всех таблицах:
| Name | Engine | Version | Row_format | Rows | Avg_row_length | Data_length | Max_data_length | Index_length | Data_free | Auto_increment | Create_time | Update_time | Check_time | Collation | Checksum | Create_options | Comment |
| ubqACL | InnoDB | 10 | Compact | 0 | 0 | 16384 | 0 | 16384 | 17825792 | 1 | 2011-08-23 17:45:48 | NULL | NULL | utf8_general_ci | NULL | | Access Control List per a ubqDocs |
| ubqAssociacions | InnoDB | 10 | Compact | 1216 | 148 | 180224 | 0 | 262144 | 17825792 | 1246 | 2011-08-23 17:45:48 | NULL | NULL | utf8_general_ci | NULL | | Vincles entre documents |
ядро базы данных - InnoDB.
Я хочу получить это значение для расчета фрагментации и запуска действий по оптимизации.
Причина, по которой Data_free всегда возвращается с одним и тем же номером в каждой таблице, проста:
Пока существуют эти два условия, вы никогда не избавитесь от фрагментации. Любая попытка запустить OPTIMIZE TABLE для таблицы InnoDB сделает данные и индексы для таблицы смежными, но будут добавлены к ibdata1, что сделает ibdata1 намного больше.
В свете этого вы должны знать, что находится внутри ibdata1. Внутри есть четыре (4) типа информации:
Вы должны сделать четыре (4) основных вещи:
Это позволит сохранить все данные и индексы вне ibdata1 и сохранить их в отдельных файлах .ibd. Оттуда вы можете запустить OPTIMIZE TABLE для таблицы InnoDB, настроенной как innodb_file_per_table. Таким образом, файлы .ibd можно дефрагментировать по отдельности.
Это сделает ibdata1 настолько маленьким, насколько это возможно, и никогда больше не станет бесконтрольно расти. Все заботы о дефрагментации InnoDB можно найти в ТАБЛИЦЕ ОПТИМИЗАЦИИ.
- Следует отметить, что OPTIMIZE TABLE для таблицы INNODB работает немного иначе, чем использование других механизмов хранения. У Percona есть хорошая статья об увеличении скорости OPTIMIZE TABLE и о том, когда вы должны / не должны рассматривать выполнение указанного действия Вот.
«Для таблиц InnoDB OPTIMIZE TABLE отображается в ALTER TABLE, который перестраивает таблицу для обновления статистики индекса и освобождения неиспользуемого пространства в кластеризованном индексе».