Назад | Перейти на главную страницу

Где MySQL хранит файлы, когда он «копирует в таблицу tmp»

У меня нет ответа на вопрос, и я понятия не имею, почему. Это выглядит разумно, но работает «вечно» (я пошел, пообедал и оставил его включенным, через 20 минут не закончил).

Глядя на «SHOW PROCESSLIST», я вижу, что мое соединение имеет статус «Копирование в таблицу tmp».

Я просмотрел свой my.cnf, и похоже, что временные файлы должны быть в / tmp, но там нет ничего, связанного с MySQL (там всего 2 каталога, оба пустые).

Чтобы помочь мне диагностировать, в чем проблема, я подумал, что посмотрю временный файл, в который он якобы копируется. Если он был огромным, я, должно быть, напортачил с запросом. Если нет, возможно, это ошибка.

Но я не могу понять, где он их хранит. Это "файл" в памяти?

Я использую MySQL 5.1.31 при установке Ubuntu 9.04 JeOS.

Многие временные таблицы могут и будут созданы в памяти. Будет ли таблица создаваться в памяти или на диске, определяется несколькими факторами, такими как размер таблицы, структура (есть ли в ней большие двоичные объекты) и другими.

Я предлагаю вам прочитать TMP_TABLE_SIZE и MAX_HEAP_TABL \ E_SIZE чтобы получить представление о том, как работают временные таблицы.

Вы можете проверить вывод

mysql> show status like '%tmp%';

если вы действительно создаете таблицы на диске. Обратите внимание, однако, что фактический файл временной таблицы практически не поможет в определении наличия проблемы.

Вы также можете попробовать ОБЪЯСНИТЕ ваш запрос и посмотрите, насколько хорошо он должен работать.

в debian - по умолчанию в / tmp [afair]

когда сомневаешься, просто беги

lsof|grep -i mysqld

Временные файлы mysql удаляются сразу после создания - они отображаются в lsof, но не в ls; они занимают место на диске, пока дескрипторы файлов не будут закрыты.

Смотря какая временная таблица. Если написано «Копировать во временную таблицу», то это копия в памяти. Если он говорит «Копировать во временную таблицу на диске», значит, он превышает размер временных таблиц в памяти и выполняет дамп на диск.

В последнем случае он будет храниться в месте, определенном tmpdir переменная. Вы можете узнать, на что это установлено:

SHOW VARIABLES LIKE 'tmpdir';

Существует переменная mysql, указывающая, где будут храниться файлы:

mysql> show variables like '%tmp%';

Найдите переменную tmpdir. Это скажет вам, где хранятся файлы tmp. Если временная таблица меньше tmp_table_size, она будет основана на памяти, а не на диске.