Системные табличные пространства InnoDB
Когда InnoDB нужно хранить общую информацию, относящуюся к системе в целом, а не к конкретной таблице, используется файл системного табличного пространства. По умолчанию это файл ibdata1, расположенный в каталоге данных (как определено переменными системы datadir или innodb_data_home_dir). InnoDB использует системное табличное пространство для хранения словаря данных, буфера изменений и журналов отмены.
Вы можете определить имя или имена файла, размер и другие параметры системного табличного пространства, установив переменную системы innodb_data_file_path. Эту переменную можно указать в качестве аргумента командной строки для mysqld или в соответствующей группе параметров сервера в файле параметров группа параметров в файле параметров. Например:
[mariadb] ... innodb_data_file_path=ibdata1:50M:autoextend
Эта переменная по умолчанию устанавливается в файл ibdata1, с минимальным размером 12M, и с включенным атрибутом autoextend.
Изменение размеров
InnoDB по умолчанию выделяет 12 МБ для файла ibdata1 системного табличного пространства. Хотя этого достаточно для большинства случаев, это может быть недостаточно для всех. После использования MariaDB некоторое время, вы можете обнаружить, что выделения недостаточно для системного табличного пространства или оно становится слишком большим для вашего диска. К счастью, вы можете позже настроить этот размер по мере необходимости.
Увеличение размера
При установке переменной системы innodb_data_file_path, вы можете определить размер каждого файла. В случаях, когда вам нужно большее системное табличное пространство, добавьте опцию autoextend к последнему значению.
[mariadb] ... innodb_data_file_path=ibdata1:12M;ibdata2:50M:autoextend
В этой конфигурации, когда последнее системное табличное пространство превышает выделенный размер, InnoDB увеличивает размер файла по приращениям. Чтобы контролировать приращение выделения, установите переменную системы innodb_autoextend_increment.
Уменьшение размера
Начиная с MariaDB 11.2.0, при запуске MariaDB, неиспользуемое табличное пространство InnoDB восстанавливается, уменьшая размер файла (MDEV-14795).
Технически, это работает следующим образом:
- Найдите последнюю использованную область в системном табличном пространстве, итерируя по BITMAP в странице описания области.
- Проверьте, используется ли табличное пространство в пределах фиксированного размера, и если последняя использованная область меньше фиксированного размера, установите желаемый целевой размер в фиксированный размер.
- Выгрузите все страницы, принадлежащие системному табличному пространству, в список выгрузки.
- Усеките усеченные страницы из списков FSP_FREE и FSP_FREE_FRAG.
- Сбросьте битовую карту в страницах описания для усеченных страниц.
- Обновите FSP_SIZE и FSP_FREE_LIMIT в заголовочной странице.
- В случае нескольких файлов рассчитайте усеченный размер последнего файла и выполните усечение в последнем файле.
В случаях, когда системное табличное пространство InnoDB стало слишком большим, до MariaDB 11.2, процесс его уменьшения немного сложнее, чем увеличение размера. MariaDB не позволяет вам удалить данные из файла табличного пространства. Вместо этого, вам нужно удалить файлы табличного пространства, а затем восстановить базу данных из резервных копий.
Утилита резервного копирования mariadb-dump создает файлы резервных копий, содержащие SQL-запросы, необходимые для восстановления базы данных. В результате она восстанавливает базу данных с минимальными данными, а не с дополнительной информацией, которая могла накопиться в файле табличного пространства.
Используйте mariadb-dump для резервного копирования всех таблиц базы данных InnoDB, включая системные таблицы в базе данных mysql, которые используют InnoDB. Вы можете узнать, какие из них, используя Информационную схему.
SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'mysql' AND ENGINE = 'InnoDB';
Если вы используете только InnoDB, вам может быть проще сделать резервную копию всех баз данных и таблиц.
$ mariadb-dump -u root -p --all-databases > full-backup.sql
Затем остановите сервер MariaDB и удалите файлы табличного пространства InnoDB. В каталоге данных или домашнем каталоге данных InnoDB удалите все файлы ibdata и ib_log, а также любые файлы с расширением .ibd или .frm.
После этого перезапустите сервер и импортируйте файл дампа:
$ mysql -u root -p < full-backup.sql
Использование необработанных разделов диска
Вместо записи InnoDB в файловую систему, вы можете настроить его для использования необработанных разделов диска. В Windows и некоторых дистрибутивах Linux это позволяет выполнять ввод-вывод без буферизации без накладных расходов файловой системы. Обратите внимание, что в многих случаях это не обязательно повысит производительность. Проведите тесты, чтобы проверить, есть ли реальные преимущества для вашего использования приложения.
Чтобы включить необработанный раздел диска, сначала запустите MariaDB с опцией newraw для табличного пространства. Например:
[mariadb] ... innodb_data_file_path=/dev/sdc:10Gnewraw
При запуске сервера MariaDB он инициализирует раздел. Не создавайте и не изменяйте данные (любые данные, записанные в InnoDB на этом этапе, будут потеряны при перезапуске). После успешного запуска сервера, остановите его, а затем снова отредактируйте конфигурационный файл, изменив ключевое слово newraw на raw.
[mariadb] ... innodb_data_file_path=/dev/sdc:10Graw
Когда вы снова запустите MariaDB, он будет читать и записывать данные InnoDB на указанный раздел диска вместо файловой системы.
Необработанные разделы диска в Windows
При определении необработанного раздела диска для InnoDB в операционной системе Windows используйте ту же процедуру, что и выше, но при определении пути для переменной системы innodb_data_file_path, используйте ./ в начале. Например:
[mariadb] ... innodb_data_file_path=//./E::10Graw
Указанный путь эквивалентен синтаксису Windows для доступа к физическому диску.
Системные таблицы в системном табличном пространстве InnoDB
InnoDB создает некоторые системные таблицы в системном табличном пространстве InnoDB:
-
SYS_DATAFILES -
SYS_FOREIGN -
SYS_FOREIGN_COLS -
SYS_TABLESPACES -
SYS_VIRTUAL -
SYS_ZIP_DICT -
SYS_ZIP_DICT_COLS
Эти таблицы нельзя запросить. Однако вы можете увидеть ссылки на них в некоторых местах, например, в таблице INNODB_SYS_TABLES в базе данных information_schema.
© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/innodb-system-tablespaces/