Spec-Zone.ru › MySQL 9.2

17.6.3.5 Временные табличные пространства

InnoDB использует временные табличные пространства сессии и глобальное временное табличное пространство.

Временные табличные пространства сессии

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

Временные табличные пространства сессии выделяются сессии из пула временных табличных пространств при первом запросе на создание временной таблицы на диске. Максимальное количество выделяемых табличных пространств для сессии составляет два: одно для временных таблиц, созданных пользователем, и другое для внутренних временных таблиц, созданных оптимизатором. Выделенные временные табличные пространства сессии используются для всех временных таблиц на диске, созданных сессией. При отключении сессии её временные табличные пространства обрезаются и возвращаются в пул. Пул из 10 временных табличных пространств создаётся при запуске сервера. Размер пула никогда не уменьшается, а табличные пространства добавляются в пул автоматически по мере необходимости. Пул временных табличных пространств удаляется при нормальной остановке или при прерванной инициализации. Файлы временных табличных пространств сессии имеют размер в пять страниц при создании и расширение имени файла .ibt.

Зарезервирован диапазон из 400 тысяч идентификаторов пространств для временных табличных пространств сессии. Поскольку пул временных табличных пространств сессии пересоздаётся каждый раз при запуске сервера, идентификаторы пространств для временных табличных пространств сессии не сохраняются при остановке сервера и могут быть повторно использованы.

Переменная innodb_temp_tablespaces_dir определяет расположение, где создаются временные табличные пространства сессии. По умолчанию это каталог #innodb_temp в каталоге данных. Запуск отказывается, если пул временных табличных пространств не может быть создан.

$> cd BASEDIR/data/#innodb_temp
$> ls
temp_10.ibt  temp_2.ibt  temp_4.ibt  temp_6.ibt  temp_8.ibt
temp_1.ibt   temp_3.ibt  temp_5.ibt  temp_7.ibt  temp_9.ibt

В режиме репликации на основе заявок (SBR) временные таблицы, созданные на реплике, находятся в единственном временном табличном пространстве сессии, которое обрезается только при остановке сервера MySQL.

Таблица INNODB_SESSION_TEMP_TABLESPACES предоставляет метаданные о временных табличных пространствах сессии.

Таблица схемы информации INNODB_TEMP_TABLE_INFO предоставляет метаданные о временных таблицах, созданных пользователем, которые активны в экземпляре InnoDB.

Глобальное временное табличное пространство

Глобальное временное табличное пространство (ibtmp1) хранит сегменты отката для изменений, внесённых в временные таблицы, созданные пользователем.

Переменная innodb_temp_data_file_path определяет относительный путь, имя, размер и атрибуты для файлов данных глобального временного табличного пространства. Если для innodb_temp_data_file_path не указано значение, по умолчанию создаётся один автоматически расширяющийся файл данных с именем ibtmp1 в каталоге innodb_data_home_dir. Начальный размер файла немного больше 12 МБ.

Глобальное временное табличное пространство удаляется при нормальной остановке или при прерванной инициализации и пересоздаётся каждый раз при запуске сервера. Глобальное временное табличное пространство получает динамически сгенерированный идентификатор пространства при создании. Запуск отказывается, если глобальное временное табличное пространство не может быть создано. Глобальное временное табличное пространство не удаляется, если сервер неожиданно остановился. В этом случае администратор базы данных может удалить глобальное временное табличное пространство вручную или перезапустить сервер MySQL. Перезапуск сервера MySQL автоматически удаляет и пересоздаёт глобальное временное табличное пространство.

Глобальное временное табличное пространство не может находиться на сыром устройстве.

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

mysql> SELECT * FROM INFORMATION_SCHEMA.FILES WHERE TABLESPACE_NAME='innodb_temporary'\G

По умолчанию данные глобального временного табличного пространства автоматически расширяются и увеличиваются по мере необходимости.

Чтобы определить, является ли файл данных глобального временного табличного пространства автоматически расширяющимся, проверьте значение innodb_temp_data_file_path:

mysql> SELECT @@innodb_temp_data_file_path;
+------------------------------+
| @@innodb_temp_data_file_path |
+------------------------------+
| ibtmp1:12M:autoextend        |
+------------------------------+

Чтобы проверить размер файлов данных глобального временного табличного пространства, просмотрите таблицу схемы информации FILES с помощью запроса, подобного этому:

mysql> SELECT FILE_NAME, TABLESPACE_NAME, ENGINE, INITIAL_SIZE, TOTAL_EXTENTS*EXTENT_SIZE
       AS TotalSizeBytes, DATA_FREE, MAXIMUM_SIZE FROM INFORMATION_SCHEMA.FILES
       WHERE TABLESPACE_NAME = 'innodb_temporary'\G
*************************** 1. row ***************************
      FILE_NAME: ./ibtmp1
TABLESPACE_NAME: innodb_temporary
         ENGINE: InnoDB
   INITIAL_SIZE: 12582912
 TotalSizeBytes: 12582912
      DATA_FREE: 6291456
   MAXIMUM_SIZE: NULL

TotalSizeBytes отображает текущий размер файла данных глобального временного табличного пространства. Для получения информации о других значениях полей см. Раздел 28.3.15, «Таблица INFORMATION_SCHEMA FILES».

Альтернативно, проверьте размер файла данных глобального временного табличного пространства в вашей операционной системе. Файл данных глобального временного табличного пространства находится в каталоге, определённом переменной innodb_temp_data_file_path.

Чтобы освободить дисковое пространство, занятое файлом данных глобального временного табличного пространства, перезапустите сервер MySQL. Перезапуск сервера удаляет и пересоздаёт файл данных глобального временного табличного пространства в соответствии с атрибутами, определёнными innodb_temp_data_file_path.

Чтобы ограничить размер файла данных глобального временного табличного пространства, настройте innodb_temp_data_file_path для указания максимального размера файла. Например:

[mysqld]
innodb_temp_data_file_path=ibtmp1:12M:autoextend:max:500M

Для настройки innodb_temp_data_file_path требуется перезапуск сервера.

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

Spec-Zone.ru

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