B.3.3.5 Где MySQL хранит временные файлы
В Unix MySQL использует значение переменной окружения TMPDIR в качестве пути к каталогу для хранения временных файлов. Если TMPDIR не задано, MySQL использует системный по умолчанию, который обычно является /tmp, /var/tmp или /usr/tmp.
В Windows MySQL проверяет в порядке значения переменных окружения TMPDIR, TEMP и TMP. Для первого найденного значения MySQL его использует и не проверяет остальные. Если ни TMPDIR, ни TEMP, ни TMP не заданы, MySQL использует системный стандарт Windows, который обычно является C:\windows\temp\.
Если файловая система, содержащая каталог временных файлов, слишком мала, вы можете использовать параметр mysqld --tmpdir для указания каталога в файловой системе с достаточным объёмом места.
Параметр --tmpdir можно установить в список нескольких путей, которые используются в циклическом порядке. Пути должны быть разделены двоеточиями (:) в Unix и точкой с запятой (;) в Windows.
Для эффективного распределения нагрузки эти пути должны быть расположены на различных физических дисках, а не на разных разделах одного диска.
Если сервер MySQL работает как реплика, вы можете установить системную переменную slave_load_tmpdir для указания отдельного каталога для хранения временных файлов при репликации LOAD
DATA операторов. Этот каталог должен находиться в файловой системе на диске (а не в памяти), чтобы временные файлы, используемые для репликации LOAD DATA, сохранялись при перезапуске машины. Каталог также не должен очищаться операционной системой во время процесса запуска системы. Однако репликация теперь может продолжиться после перезапуска, если временные файлы были удалены.
MySQL обеспечивает удаление временных файлов, если mysqld завершается. На платформах, которые это поддерживают (таких как Unix), это делается путем разрыва ссылки на файл после его открытия. Недостатком этого является то, что имя не отображается в списках каталогов, и вы не видите большой временный файл, который заполняет файловую систему, в которой находится каталог временных файлов. (В таких случаях lsof +L1 может помочь в идентификации больших файлов, связанных с mysqld.)
При сортировке (ORDER BY или GROUP
BY) MySQL обычно использует один или два временных файла. Максимальное количество дискового пространства, необходимого, определяется следующим выражением:
(length of what is sorted + sizeof(row pointer))
* number of matched rows
* 2
Размер указателя строки обычно составляет четыре байта, но может увеличиться в будущем для очень больших таблиц.
Для некоторых операторов MySQL создаёт временные SQL-таблицы, которые не скрыты и имеют имена, начинающиеся с #sql.
Некоторые запросы SELECT создают временные SQL-таблицы для хранения промежуточных результатов.
Операции DDL, которые перестраивают таблицу и не выполняются онлайн с помощью техники ALGORITHM=INPLACE, создают временную копию исходной таблицы в том же каталоге, что и исходная таблица.
Операции DDL онлайн могут использовать временные логические файлы для записи одновременных DML, временные файлы сортировки при создании индекса и временные файлы промежуточных таблиц при перестройке таблицы. Для получения дополнительной информации см. Раздел 14.13.3, «Требования к дисковому пространству для онлайн-операций DDL».
InnoDB не сжатые, созданные пользователем временные таблицы и внутренние временные таблицы на диске создаются в файле временного пространства таблиц с именем ibtmp1 в каталоге данных MySQL. Для получения дополнительной информации см. Раздел 14.6.3.5, «Временное пространство таблиц».
См. также Раздел 14.16.7, «Таблица InnoDB INFORMATION_SCHEMA Temporary Table Info». Сиротские временные таблицы.
© 2025 Oracle
Licensed under the GPLv2 License.