17.6.3.2 Пространства имен таблиц InnoDB по одному файлу на таблицу
Пространство имен таблиц по одному файлу на таблицу содержит данные и индексы для одной единственной 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.ibdtest.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.