Spec-Zone.ru › MySQL 8.4

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 размера страницы. Для значения 64 КБ innodb_page_size максимальная длина строки немного меньше 16 КБ.

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

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

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

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

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

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

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

Spec-Zone.ru

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