14.12.2 Управление файловым пространством
Файлы данных, которые вы определяете в файле конфигурации с помощью опции конфигурации innodb_data_file_path, образуют InnoDB. Файлы логически конкатенируются для формирования системного табличного пространства. Полосатая структура не используется. Вы не можете определить, где в системном табличном пространстве размещаются ваши таблицы. В вновь созданном системном табличном пространстве InnoDB выделяет пространство, начиная с первого файла данных.
Чтобы избежать проблем, связанных с хранением всех таблиц и индексов внутри системного табличного пространства, вы можете включить опцию конфигурации innodb_file_per_table (по умолчанию), которая хранит каждую вновь созданную таблицу в отдельном файле табличного пространства (с расширением .ibd). Для таблиц, хранящихся таким образом, фрагментация внутри файла диска меньше, и при обрезании таблицы пространство возвращается операционной системе, а не остается зарезервированным InnoDB в системном табличном пространстве. Дополнительную информацию см. в разделе 14.6.3.2, «File-Per-Table Tablespaces».
Вы также можете хранить таблицы в . Общие табличные пространства — это общие табличные пространства, созданные с использованием синтаксиса CREATE TABLESPACE. Они могут быть созданы вне каталога данных MySQL, могут содержать несколько таблиц и поддерживают таблицы всех форматов строк. Дополнительную информацию см. в разделе 14.6.3.3, «General Tablespaces».
Страницы, экстенты, сегменты и табличные пространства
Каждое табличное пространство состоит из баз данных . У каждого табличного пространства в экземпляре MySQL одинаковый . По умолчанию все табличные пространства имеют размер страницы 16 КБ; вы можете уменьшить размер страницы до 8 КБ или 4 КБ, указав опцию innodb_page_size при создании экземпляра MySQL. Вы также можете увеличить размер страницы до 32 КБ или 64 КБ. Дополнительную информацию см. в документации по innodb_page_size.
Страницы сгруппированы в экстенты размером 1 МБ для страниц размером до 16 КБ (64 последовательные страницы по 16 КБ, или 128 страниц по 8 КБ, или 256 страниц по 4 КБ). Для размера страницы 32 КБ размер экстенты равен 2 МБ. Для размера страницы 64 КБ размер экстенты равен 4 МБ. “Файлы” внутри табличного пространства называются сегментами в InnoDB. (Эти сегменты отличаются от , который фактически содержит много сегментов табличного пространства.)
Когда сегмент растет внутри табличного пространства, InnoDB выделяет первые 32 страницы по одной за раз. После этого InnoDB начинает выделять целые экстенты сегменту. InnoDB может добавить до 4 экстентов за раз к большому сегменту, чтобы обеспечить хорошую последовательность данных.
Для каждого индекса в InnoDB выделяются два сегмента. Один предназначен для нелистовых узлов , другой — для листовых узлов. Сохранение листовых узлов контигуальными на диске обеспечивает лучшие операции последовательного ввода-вывода, поскольку эти листовые узлы содержат фактические данные таблицы.
Некоторые страницы в табличном пространстве содержат битовые карты других страниц, и поэтому некоторые экстенты в InnoDB табличном пространстве не могут быть выделены сегментам целиком, а только как отдельные страницы.
Когда вы запрашиваете доступное свободное пространство в табличном пространстве, выполнив оператор SHOW TABLE STATUS, InnoDB сообщает об экстентах, которые однозначно свободны в табличном пространстве. InnoDB всегда резервирует некоторые экстенты для очистки и других внутренних целей; эти зарезервированные экстенты не включаются в свободное пространство.
При удалении данных из таблицы InnoDB сокращает соответствующие индексы B-дерева. Станет ли освобожденное пространство доступным для других пользователей, зависит от того, освобождает ли образец удалений отдельные страницы или экстенты в табличном пространстве. Удаление таблицы или удаление всех строк из нее гарантирует освобождение пространства для других пользователей, но помните, что удаленные строки физически удаляются только операцией , которая происходит автоматически некоторое время спустя после того, как они больше не нужны для отката транзакций или согласованных чтений. (См. раздел 14.3, «InnoDB Multi-Versioning».)
Как страницы относятся к строкам таблиц
Максимальная длина строки немного меньше половины страницы базы данных для настроек 4 КБ, 8 КБ, 16 КБ и 32 КБ innodb_page_size. Например, максимальная длина строки немного меньше 8 КБ для размера страницы 16 КБ по умолчанию InnoDB. Для страниц размером 64 КБ максимальная длина строки немного меньше 16 КБ.
Если длина строки не превышает максимальную длину, вся строка хранится локально на странице. Если длина строки превышает максимальную длину, выбираются для внешнего хранения вне страницы до тех пор, пока строка не поместится в пределы максимальной длины строки. Внешнее хранение вне страницы для столбцов переменной длины отличается в зависимости от формата строки:
-
Форматы строк COMPACT и REDUNDANT
Когда столбец переменной длины выбирается для внешнего хранения вне страницы,
InnoDBхранит первые 768 байт локально в строке, а остальную часть — во внешних страницах переполнения. У каждого такого столбца есть свой список страниц переполнения. Префикс из 768 байт сопровождается 20-байтовым значением, которое хранит истинную длину столбца и указывает на список переполнения, где хранится остальная часть значения. См. раздел 14.11, «InnoDB Row Formats». -
Форматы строк DYNAMIC и COMPRESSED
Когда столбец переменной длины выбирается для внешнего хранения вне страницы,
InnoDBлокально хранит 20-байтовый указатель в строке, а остальную часть — во внешних страницах переполнения. См. раздел 14.11, «InnoDB Row Formats».
LONGBLOB и LONGTEXT столбцы должны быть меньше 4 ГБ, а общая длина строки, включая BLOB и TEXT столбцы, должна быть меньше 4 ГБ.
© 2025 Oracle
Licensed under the GPLv2 License.