Spec-Zone.ru › MySQL 9.2

17.11.2 Управление файловым пространством

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

Чтобы избежать проблем, связанных с хранением всех таблиц и индексов внутри системного табличного пространства, можно включить параметр конфигурации innodb_file_per_table (по умолчанию), который хранит каждую вновь созданную таблицу в отдельном файле табличного пространства (с расширением .ibd). Для таблиц, хранящихся таким образом, фрагментация внутри файла диска меньше, и при усечении таблицы пространство возвращается операционной системе, а не по-прежнему резервируется InnoDB в системном табличном пространстве. Для получения дополнительной информации см. Раздел 17.6.3.2, «File-Per-Table Tablespaces».

Вы также можете хранить таблицы в . Общие табличные пространства — это общие табличные пространства, созданные с помощью синтаксиса CREATE TABLESPACE. Их можно создавать вне каталога данных MySQL, они могут содержать несколько таблиц и поддерживают таблицы всех форматов строк. Для получения дополнительной информации см. Раздел 17.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-дерева. Становится ли освобождённое пространство доступным для других пользователей, зависит от того, освобождают ли удалённые данные отдельные страницы или экстенты в табличном пространстве. Удаление таблицы или удаление всех строк из неё гарантирует освобождение места для других пользователей, но помните, что удалённые строки физически удаляются только операцией , которая происходит автоматически некоторое время спустя после того, как они больше не нужны для отката транзакций или согласованного чтения. (См. Раздел 17.3, «InnoDB Multi-Versioning».)

Настройка процента зарезервированных страниц сегмента файла

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

Настройка применима к табличным пространствам «по таблице» и общим табличным пространствам. Значение по умолчанию для innodb_segment_reserve_factor составляет 12,5 процента.

Переменная innodb_segment_reserve_factor динамическая и может быть настроена с помощью оператора SET. Например:

mysql> SET GLOBAL innodb_segment_reserve_factor=10;

Как страницы связаны со строками таблиц

Для innodb_page_size значений 4 КБ, 8 КБ, 16 КБ и 32 КБ максимальная длина строки немного меньше половины размера страницы базы данных. Например, максимальная длина строки немного меньше 8 КБ для размера страницы по умолчанию 16 КБ InnoDB. Для значения innodb_page_size 64 КБ максимальная длина строки немного меньше 16 КБ.

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

  • Форматы строк COMPACT и REDUNDANT

    Когда столбец переменной длины выбирается для внешнего хранения вне страницы, InnoDB сохраняет первые 768 байтов локально в строке, а остальное внешне на страницах переполнения. У каждого такого столбца есть свой список страниц переполнения. Префикс длиной 768 байтов сопровождается значением 20 байтов, которое хранит истинную длину столбца и указывает на список переполнения, где хранится остальная часть значения. См. Раздел 17.10, «Форматы строк InnoDB».

  • Форматы строк DYNAMIC и COMPRESSED

    Когда столбец переменной длины выбирается для внешнего хранения вне страницы, InnoDB сохраняет локально в строке указатель размером 20 байтов, а остальное внешне на страницах переполнения. См. Раздел 17.10, «Форматы строк InnoDB».

LONGBLOB и LONGTEXT столбцы должны быть меньше 4 ГБ, а общая длина строки, включая BLOB и TEXT столбцы, должна быть меньше 4 ГБ.

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-9.2-en/innodb-file-space.html

Spec-Zone.ru

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