У меня нет ответа на вопрос, и я понятия не имею, почему. Это выглядит разумно, но работает «вечно» (я пошел, пообедал и оставил его включенным, через 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, она будет основана на памяти, а не на диске.