Spec-Zone.ru › MySQL 5.7

14.6.3.2 Файловые табличные пространства

Файловое табличное пространство, приходящееся на одну таблицу, содержит данные и индексы для одной единственной InnoDB таблицы и хранится на файловой системе в единственном файле данных.

Характеристики файловых табличных пространств, приходящихся на одну таблицу, описаны в следующих разделах данного раздела:

  • Настройка файлового табличного пространства, приходящегося на одну таблицу

  • Файлы данных файлового табличного пространства, приходящегося на одну таблицу

  • Преимущества файловых табличных пространств, приходящихся на одну таблицу

  • Недостатки файловых табличных пространств, приходящихся на одну таблицу

Настройка файлового табличного пространства, приходящегося на одну таблицу

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

Значение innodb_file_per_table можно указать в файле параметров или настроить во время выполнения с помощью оператора SET GLOBAL. Изменение значения во время выполнения требует привилегий, достаточных для настройки глобальных системных переменных. См. Раздел 5.1.8.1, «Привилегии на системные переменные».

Файл параметров:

[mysqld]
innodb_file_per_table=ON

Использование SET GLOBAL во время выполнения:

mysql> SET GLOBAL innodb_file_per_table=ON;

innodb_file_per_table включена по умолчанию в MySQL 5.6 и более поздних версиях. Возможно, следует отключить ее, если важна обратная совместимость с более ранними версиями MySQL.

Предупреждение

Отключение innodb_file_per_table предотвращает операции копирования таблиц ALTER TABLE от неявного перемещения таблицы, расположенной в системном табличном пространстве, в файловое табличное пространство, приходящееся на одну таблицу. Операция копирования таблицы ALTER TABLE воссоздает таблицу с использованием текущего значения innodb_file_per_table. Это поведение не относится к добавлению или удалению вторичных индексов, а также к операциям ALTER TABLE, использующим алгоритм INPLACE, или к таблицам, добавленным в системное табличное пространство с использованием синтаксиса CREATE TABLE ... TABLESPACE или ALTER TABLE ... TABLESPACE.

Файлы данных файлового табличного пространства, приходящегося на одну таблицу

Файловое табличное пространство, приходящееся на одну таблицу, создается в файле данных .ibd в директории схемы в каталоге данных MySQL. Файл .ibd называется по имени таблицы (table_name.ibd). Например, файл данных для таблицы test.t1 создается в директории test в каталоге данных MySQL:

mysql> USE test;

mysql> CREATE TABLE t1 (
   id INT PRIMARY KEY AUTO_INCREMENT,
   name VARCHAR(100)
 ) ENGINE = InnoDB;

$> cd /path/to/mysql/data/test
$> ls
t1.ibd

Можно использовать предложение DATA DIRECTORY оператора CREATE TABLE для неявного создания файла данных файлового табличного пространства, приходящегося на одну таблицу, за пределами каталога данных. Более подробная информация представлена в Разделе 14.6.1.2, «Создание таблиц внешним образом».

Преимущества файловых табличных пространств, приходящихся на одну таблицу

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

  • После усечения или удаления таблицы, созданной в файловом табличном пространстве, приходящемся на одну таблицу, дисковое пространство возвращается операционной системе. Усечение или удаление таблицы, хранящейся в общем табличном пространстве, создает свободное пространство внутри файла данных общего табличного пространства, которое может быть использовано только для данных InnoDB. Другими словами, размер файла данных общего табличного пространства не уменьшается после усечения или удаления таблицы.

  • Операция копирования таблицы ALTER TABLE над таблицей, находящейся в общем табличном пространстве, может увеличить количество дискового пространства, занимаемого табличным пространством. Для таких операций может потребоваться дополнительное пространство, равное объему данных в таблице плюс индексы. Это пространство не возвращается операционной системе, как это происходит в случае файловых табличных пространств, приходящихся на одну таблицу.

  • Производительность оператора TRUNCATE TABLE выше при выполнении над таблицами, находящимися в файловых табличных пространствах, приходящихся на одну таблицу.

  • Файлы данных файлового табличного пространства, приходящегося на одну таблицу, могут быть созданы на отдельных накопителях для оптимизации ввода-вывода, управления пространством или резервного копирования. См. Раздел 14.6.1.2, «Создание таблиц внешним образом».

  • Можно импортировать таблицу, находящуюся в файловом табличном пространстве, приходящемся на одну таблицу, из другого экземпляра MySQL. См. Раздел 14.6.1.3, «Импорт таблиц InnoDB».

  • Таблицы, созданные в файловых табличных пространствах, приходящихся на одну таблицу, используют формат файлов Barracuda. См. Раздел 14.10, «Управление форматом файлов InnoDB». Формат файлов Barracuda позволяет использовать функции, связанные с DYNAMIC и COMPRESSED форматами строк. См. Раздел 14.11, «Форматы строк InnoDB».

  • Таблицы, хранящиеся в отдельных файлах табличного пространства, могут экономить время и повышать шансы на успешное восстановление при повреждении данных, отсутствии резервных копий или бинарных журналов или невозможности перезапуска экземпляра сервера MySQL.

  • Можно быстро создать резервную копию или восстановить таблицы, созданные в файловых табличных пространствах, приходящихся на одну таблицу, с помощью MySQL Enterprise Backup без прерывания работы с другими таблицами InnoDB. Это полезно для таблиц с различными графиками резервного копирования или которые требуют резервного копирования реже. Подробности см. в

  • Файловые табличные пространства, приходящиеся на одну таблицу, позволяют отслеживать размер таблицы на файловой системе, отслеживая размер файла данных табличного пространства.

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

  • Размер таблиц в общем табличном пространстве ограничен пределом размера табличного пространства 64 ТБ. В сравнении, каждое файловое табличное пространство, приходящееся на одну таблицу, имеет предел размера 64 ТБ, что предоставляет достаточно места для роста отдельных таблиц.

END_OF_DOCUMENT_MARKER ```
Недостатки табличного пространства размещения файла на таблицу

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

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

  • fsync операции выполняются над множеством файлов данных табличного пространства размещения файла на таблицу вместо одного файла данных общего пространства размещения. Поскольку fsync операции выполняются по файлу, операции записи для нескольких таблиц не могут быть объединены, что может привести к большему общему количеству fsync операций.

  • mysqld должен хранить открытую дескриптор файла для каждого табличного пространства размещения файла на таблицу, что может повлиять на производительность, если у вас много таблиц в табличных пространствах размещения файла на таблицу.

  • Требуется больше дескрипторов файлов, когда каждый таблица имеет свой собственный файл данных.

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

  • Пул буферов сканируется при удалении таблицы, находящейся в табличном пространстве размещения файла на таблицу, что может занять несколько секунд для больших пулов буферов. Сканирование выполняется с широкой внутренней блокировкой, что может задерживать другие операции.

  • Переменная innodb_autoextend_increment, которая определяет размер приращения для расширения размера файла общего пространства размещения с автоматическим расширением, когда он заполняется, не применяется к файлам табличного пространства размещения файла на таблицу, которые расширяются автоматически независимо от параметра innodb_autoextend_increment. Первоначальные расширения табличного пространства размещения файла на таблицу происходят небольшими порциями, после чего расширения происходят с шагом 4 МБ.

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-5.7-en/innodb-file-per-table-tablespaces.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API