Насколько большой слишком большой для файла ibdata?

9

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

-rw-rw---- 1 mysql mysql  15G Apr 18 10:11 ibdata1
nachito
источник
4
Ваш файл ibdata очень маленький.
Джефф Ферланд
Будет ли разделение этого файла на более мелкие куски (скажем, 4G) лучше или хуже для производительности?
Начито

Ответы:

13

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

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

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

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

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

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

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

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

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

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

Не переживайте, база данных 15 ГБ.

Джефф Ферланд
источник
Похоже, я чуть менее 50% используется. InnoDB free: 7364608 kB
Начито
@nachito Похоже, все должно быть хорошо. Если вы чувствуете, что вам нужно пространство назад для файловой системы, восстановите его. Если вы просто беспокоитесь о производительности, не надо. Кроме того, для повышения производительности лучше всего хранить файлы базы данных в отдельном разделе, поэтому, если вы сосредоточены на производительности, вы все равно не увидите пригодного для использования восстановления.
Джефф Ферланд
6

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

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

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

PQD
источник
Я понимаю, что это никогда не уменьшится без выгрузки и перезагрузки таблиц. Однако, если я отбросил базы данных InnoDB, будет ли он использовать это «свободное» пространство, прежде чем оно снова начнет расти?
Начито
1
@nachito Да, будет.
Джефф Ферланд
Ваш ответ - просто прямое предложение, не затуманивая проблему, как мой ответ, кажется, сделал. +1 !!!
RolandoMySQLDBA
1
Что ж, ответ - это решение для уменьшения пространства, используемого файлами данных, но это не обсуждение достоинств, связанных с этим, и это вопрос, который я прочитал. Разве 15ГБ файл ибдаты имеет большое значение?
Джефф Ферланд