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

Насколько велик для файла ibdata?

Мой файл ibdata очень большой, по крайней мере, мне кажется очень большим. Это чрезмерно или не так уж плохо?

-rw-rw---- 1 mysql mysql  15G Apr 18 10:11 ibdata1

Когда это может быть проблемой

Если ты бежишь show table status на столе и Data_free поле составляет подавляющее большинство ваших ibdata1 размер файла, тогда у вас может быть много потерянного места. Это станет проблемой при большом количестве вставок / удалений. Если это так и временные вставки и удаления составляют основную часть ваших данных, то у вас есть хороший случай для файла на таблицу.

Однако это не автоматическое «да». В мире много говорят о внутренней фрагментации внутри файлов InnoDB, но размещение их в файловой системе в виде файла на таблицу просто перемещает вашу фрагментацию на уровень файловой системы, а не на уровень базы данных.

Почему это обычно не проблема

Думайте о своем файле InnoDB как о файловой системе, а не как о файле. Если у вас много файлов, вам понадобится большая файловая система.

По большей части файловые системы отлично справляются с масштабированием для обработки терабайтов данных и неисчислимого количества файлов. Иногда они сталкиваются с проблемами из-за плохой индексации (например, ограничение количества файлов в каталоге до снижения производительности), но по большей части современная файловая система может значительно превышать диапазон терабайт.

InnoDB работает точно так же. Размер вашего файла данных может быть огромным ... и, как и большие файловые системы, может создавать проблемы с резервным копированием ваших данных. Однако, как разделение вашей файловой системы на несколько разделов не помогает с этой проблемой, так и попытки манипулировать innodb. Хотя вы можете использовать innodb_file_per_table, Я редко рекомендую это.

Как и в случае с вашей файловой системой, лучший ответ - знать внутренние ограничения и работать с ними. Изучите индексы и применяйте их соответствующим образом. Не пытайтесь разделить InnoDB, он не предназначен для этого.

Поскольку я изо всех сил пытаюсь конструктивно передать концепцию, вот краткое прочтение, что слова такие лучше, чем я могу: Терабайты - это не большие данные, а петабайты - это.

Я помню действительно очень старый маркетинговый слайд MySQL, где у клиента было хранилище данных с несколькими терабайтами. Много лет назад. InnoDB или MyISAM, оба будут работать. Это стандартный набор MySQL.

Не беспокойтесь о базе данных на 15 ГБ.

Файлы ibdata не сжимаются - если вы недавно удалили несколько таблиц или удалили много строк - innodb в вашей конфигурации не освободит свободное пространство обратно в файловую систему. я бы посоветовал вам:

  • сделайте резервную копию всех ваших данных, например, с помощью mysqldump
  • добавить в my.cnf директиву innodb_file_per_table
  • перезапустить mysql
  • удалить все базы данных с помощью движка innodb
  • остановить mysql
  • удалить файл ibdata
  • rm ib_logfile [01]
  • запустить mysql, проверить системный журнал, все ли в порядке
  • перезагрузите дамп

Таким образом, вы сможете освободить место при удалении таблицы / базы данных innodb - связанные файлы idb будут немедленно удалены.