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 работает как реплика, вы можете установить системную переменную replica_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-операций, временные файлы сортировки при создании индекса и временные промежуточные таблицы при перестроении таблицы. Для получения дополнительной информации см. Раздел 17.12.3, «Требования к дисковому пространству для онлайн DDL».
InnoDB Пользовательские временные таблицы и внутренние временные таблицы на диске создаются в файле временного табличного пространства, названном ibtmp1 в каталоге данных MySQL. Для получения дополнительной информации см. Раздел 17.6.3.5, «Временные табличные пространства».
См. также Раздел 17.15.7, «Таблица InnoDB INFORMATION_SCHEMA Temporary Table Info».
Необязательный модификатор EXTENDED заставляет SHOW TABLES отображать скрытые таблицы, созданные в результате неудачных ALTER
TABLE запросов. См. Раздел 15.7.7.39, «Запрос SHOW TABLES».
© 2025 Oracle
Licensed under the GPLv2 License.