Файл ibdata1
является системным табличным пространством для инфраструктуры InnoDB.
Он содержит несколько классов для информации, жизненно важной для InnoDB
- Страницы табличных данных
- Таблицы указателей страниц
- Словарь с данными
- Контрольные данные MVCC
- Отменить пространство
- Откат сегментов
- Двойной буфер записи (страницы, написанные в фоновом режиме, чтобы избежать кэширования ОС)
- Вставить буфер (изменения во вторичные индексы)
Обратите внимание на место ibdata1 во вселенной InnoDB (справа)
Вы можете отделить страницы данных и индексов ibdata1
, включив innodb_file_per_table . Это приведет к тому, что любая вновь созданная таблица InnoDB будет хранить данные и индексные страницы во внешнем .ibd
файле.
пример
- datadir - это / var / lib / mysql
CREATE TABLE mydb.mytable (...) ENGINE=InnoDB;
создает /var/lib/mysql/mydb/mytable.frm
- innodb_file_per_table включен, страницы данных / индекса хранятся в
/var/lib/mysql/mydb/mytable.ibd
- innodb_file_per_table отключен, страницы данных / индексов хранятся в ibdata1
Независимо от того, где хранится таблица InnoDB, функциональные возможности InnoDB требуют поиска метаданных таблицы, а также сохранения и извлечения информации MVCC для поддержки соответствия ACID и изоляции транзакции .
Вот мои прошлые статьи по отделению табличных данных и индексов от ibdata1
ЧТО ДЕЛАТЬ ДАЛЬШЕ
Вы можете продолжать хранить в ibdata1 все, но это делает создание снимков LVM настоящим трудоемким делом (мое личное мнение).
Вам нужно использовать мой пост StackOverflow и окончательно сжать этот файл.
Пожалуйста, запустите этот запрос:
SELECT
((POWER(1024,3)*94 - InnoDBDiskDataAndIndexes))/POWER(1024,3) SpaceToReclaim
FROM
(SELECT SUM(data_length+index_length) InnoDBDiskDataAndIndexes
FROM information_schema.tables WHERE engine='InnoDB') A;
Это скажет, сколько потраченного пространства может быть восстановлено после применения InnoDB Cleanup.