Назад | Перейти на главную страницу

MySQL восстанавливает пространство индекса после большого удаления?

Я понимаю, что после выполнения большого удаления в MySQL вам нужно выполнить NULL ALTER, чтобы восстановить диск пространство, верно ли это также для освобождения пространства индекса?

У нас есть таблицы, использующие> 10 ГБ пространства индекса, и мы удалили / заархивировали большие фрагменты этих данных и не уверены, нужно ли нам перестроить таблицу, чтобы уменьшить размер индекс.

Кто-нибудь может дать совет?

Мы стараемся не перестраивать таблицу, так как это займет некоторое время и заблокирует таблицу.

Спасибо!

Вы используете InnoDB. К сожалению, в конфигурации по умолчанию InnoDB никогда не возвращает дисковое пространство, если вы не используете innodb_file_per_table, и в этом случае дисковое пространство можно повторно занять, запустив optimize table foo.

Если вы не используете innodb_file_per_table, то вам необходимо сделать следующее:

  1. Использовать mysqldump сбросить ваши базы данных в файл.
  2. Отбросьте свои базы данных.
  3. Остановите mysql.
  4. Удалите файлы innodb (или переместите их в другое место).
  5. Запустите mysql.
  6. Создайте заново свои базы данных и повторно импортируйте их из файла mysqldump.

Излишне говорить, что перед этим вам лучше убедиться, что у вас есть очень хорошая резервная копия. Также настоятельно рекомендуется включить innodb_file_per_table пока у вас остановлен mysql.