Spec-Zone.ru › MySQL 9.2

17.6.3.2 Пространства имен таблиц с файлами на основе таблиц

Пространство имен таблиц с файлами на основе таблиц содержит данные и индексы для одной таблицы InnoDB и хранится в файловой системе в одном файле данных.

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

  • Настройка пространства имен таблиц с файлами на основе таблиц

  • Файлы данных пространства имен таблиц с файлами на основе таблиц

  • Преимущества пространств имен таблиц с файлами на основе таблиц

  • Недостатки пространств имен таблиц с файлами на основе таблиц

Настройка пространства имен таблиц с файлами на основе таблиц

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

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

Файл опций:

[mysqld]
innodb_file_per_table=ON

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

mysql> SET GLOBAL innodb_file_per_table=ON;
Файлы данных пространства имен таблиц с файлами на основе таблиц

Пространство имен таблиц с файлами на основе таблиц создается в файле данных .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;

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

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

Преимущества пространств имен таблиц с файлами на основе таблиц

Пространства имен таблиц с файлами на основе таблиц обладают следующими преимуществами по сравнению с общими пространствами имен, такими как системное пространство имен или общие пространства имен:

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

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

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

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

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

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

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

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

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

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

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

Недостатки пространств имен таблиц с файлами на основе таблиц

Пространства имен таблиц с файлами на основе таблиц имеют следующие недостатки по сравнению с общими пространствами имен, такими как системное пространство имен или общие пространства имен.

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

  • 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-9.2-en/innodb-file-per-table-tablespaces.html

Spec-Zone.ru

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