14.6.3.5 Временной табличный пространство InnoDB
Временные таблицы, созданные пользователем, и внутренние временные таблицы на диске создаются в общем временном табличном пространстве. Переменная innodb_temp_data_file_path определяет относительный путь, имя, размер и атрибуты файлов данных временного табличного пространства. Если для innodb_temp_data_file_path не указано значение, по умолчанию создается автоматически расширяющийся файл данных с именем ibtmp1 в каталоге innodb_data_home_dir, размер которого немного больше 12 МБ.
В MySQL 5.6 временные таблицы без сжатия создаются в отдельных табличных пространствах, по одному файлу на таблицу, в каталоге временных файлов или в системном табличном пространстве InnoDB в каталоге данных, если innodb_file_per_table отключено. Введение общего временного табличного пространства в MySQL 5.7 устраняет затраты производительности, связанные с созданием и удалением табличного пространства по одному файлу на временную таблицу для каждой временной таблицы. Специальное временное табличное пространство также означает, что больше нет необходимости сохранять метаданные временных таблиц в системном табличном пространстве InnoDB.
Сжатые временные таблицы, которые являются временными таблицами, созданными с использованием атрибута ROW_FORMAT=COMPRESSED, создаются в табличных пространствах в каталоге временных файлов.
Временное табличное пространство удаляется при нормальной остановке или при прерванной инициализации и пересоздается каждый раз при запуске сервера. Временное табличное пространство получает динамически сгенерированный идентификатор пространства при создании. Запуск отказывается, если временное табличное пространство не может быть создано. Временное табличное пространство не удаляется, если сервер неожиданно остановился. В этом случае администратор базы данных может удалить временное табличное пространство вручную или перезапустить сервер, который автоматически удалит и пересоздаст временное табличное пространство.
Временное табличное пространство не может находиться на блочном устройстве без файловой системы.
Таблица схемы информации FILES предоставляет метаданные о временном табличном пространстве InnoDB. Выполните запрос, аналогичный этому, чтобы просмотреть метаданные временного табличного пространства:
mysql> SELECT * FROM INFORMATION_SCHEMA.FILES WHERE TABLESPACE_NAME='innodb_temporary'\G
Таблица схемы информации INNODB_TEMP_TABLE_INFO предоставляет метаданные о созданных пользователем временных таблицах, которые в настоящее время активны в экземпляре InnoDB.
Управление размером файла данных временного табличного пространства
По умолчанию файл данных временного табличного пространства автоматически расширяется и увеличивается в размере по мере необходимости для размещения временных таблиц на диске. Например, если операция создает временную таблицу размером 20 МБ, файл данных временного табличного пространства, размер которого по умолчанию при создании составляет 12 МБ, расширяется до нужного размера. При удалении временных таблиц освобожденное пространство может быть повторно использовано для новых временных таблиц, но размер файла данных остается увеличенным.
Файл данных автоматически расширяющегося временного табличного пространства может стать очень большим в средах, использующих большие временные таблицы или активно использующих временные таблицы. Большой файл данных также может получиться из длительных запросов, использующих временные таблицы.
Чтобы определить, автоматически ли расширяется файл данных временного табличного пространства, проверьте значение настройки 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 сообщает о текущем размере файла данных временного табличного пространства. Для получения информации об остальных значениях полей см. Раздел 24.3.9, «Таблица INFORMATION_SCHEMA FILES».
В качестве альтернативы, проверьте размер файла данных временного табличного пространства в вашей операционной системе. По умолчанию файл данных временного табличного пространства находится в каталоге, определенном параметром конфигурации innodb_temp_data_file_path. Если для этого параметра явно не было указано значение, файл данных временного табличного пространства с именем ibtmp1 создается в innodb_data_home_dir, который по умолчанию равен каталогу данных MySQL, если не указано иное.
Чтобы освободить дисковое пространство, занимаемое файлом данных временного табличного пространства, перезапустите сервер 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 требуется перезапуск сервера.
В качестве альтернативы, настройте переменные default_tmp_storage_engine и internal_tmp_disk_storage_engine, которые определяют используемый движок хранения для созданных пользователем и внутренних временных таблиц на диске, соответственно. Обе переменные по умолчанию установлены в InnoDB. Движок хранения MyISAM использует отдельный файл для каждой временной таблицы, который удаляется при удалении временной таблицы.
© 2025 Oracle
Licensed under the GPLv2 License.