Как освободить место на диске в InnoDB после удаления таблицы

У меня есть большая InnoDB таблица в mysql. Проблема в том, что мое дисковое пространство почти заполнено. Я хочу уменьшить место на диске. Если я удалю несколько строк из таблицы и воспользуюсь этой командой:

optimize TABLE_NAME

тогда мое дисковое пространство будет уменьшено. Но я хочу бросить стол. Если я отброшу таблицу, таблицы для ее оптимизации не будет! Какая команда подходит для уменьшения дискового пространства после удаления таблицы InnoDB?


person Omidreza Bagheri    schedule 16.09.2015    source источник


Ответы (4)


Команда drop автоматически освободит место на диске.

Примечание: Предполагая, что вы используете innodb_file_per_table, поскольку вы можете освободить место, оптимизировав синтаксис таблицы.

person Zafar Malik    schedule 16.09.2015
comment
Но если вы не создавали свои таблицы с file_per_table, у вас есть большая проблема. Он включает выгрузку данных и их перезагрузку. Смотрите множество сообщений о том, как сжать ibdata1. - person Rick James; 16.09.2015

Вы можете попробовать настроить свой сервер для использования innodb_file_per_table, но убедитесь, что у вас есть резервная копия, а затем сбросьте и восстановите ее. Вы можете запустить optimize table.

Вы можете запустить, чтобы проверить, включена ли innodb_file_per_table

mysql> show variables like "innodb_file_per_table";
+-----------------------+-------+
| Variable_name         | Value |
+-----------------------+-------+
| innodb_file_per_table | ON    |
+-----------------------+-------+
1 row in set (0.00 sec)
person Rahul Tripathi    schedule 16.09.2015

Фактически, чтобы освободить место после удаления таблиц в MySQL, вы должны включить Per-Table File в конфигурации MySQL. Подробнее читайте здесь:

https://dev.mysql.com/doc/refman/5.6/en/innodb-multiple-tablespaces.html

person Musa Haidari    schedule 16.09.2015
comment
Если у вас не было innodb_file_per_table = ON до выполнения OPTIMIZE или DROP, это не освободит место для ОС. - person Rick James; 09.12.2019

OPTIMIZE TABLE делает копию таблицы. В частности, это

  1. Создайте новую схему таблицы, подобную существующей.
  2. Скопируйте строки в новую таблицу.
  3. Переименовать, чтобы поменять местами таблицы.
  4. Бросьте старый стол.

Обратите особое внимание на то, что на короткое время у вас будет две копии таблицы, занимающие место на диске.

  • Если у вас слишком мало места на диске, это не удастся.
  • Если у вас innodb_file_per_table = OFF, файл ibdata может расширяться, но не сжиматься. Опять же, это может привести к сбою.

Начиная с версии 5.6.17, OPTIMIZE TABLE будет выполнять работы на месте. Однако вы должны удалить и повторно добавить любые FULLTEXT индексы.

DROP TABLE работает одним из следующих способов:

  • innodb_file_per_table = OFF: освободить место в ibdata. Но это пространство не предоставляется ОС. Вместо этого он будет повторно использован для вставок и т. Д. В любую таблицу.
  • innodb_file_per_table = ON: файл, взятый таблицей, немедленно передается в ОС.

Но ... Когда я говорю о настройке innodb_file_per_table, я имею в виду настройку, когда таблица была CREATEd или последней ALTERed, а не текущая настройка.

person Rick James    schedule 09.12.2019