Файл 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 справжніми зухвальцями (моя особиста думка).
Вам потрібно використовувати My StackOverflow post і постійно зменшувати цей файл.
Будь ласка, запустіть цей запит:
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.