powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Откуда временная таблица в 1GB TMPFS из таблиц MYISAM по 15 Мб
10 сообщений из 10, страница 1 из 1
Откуда временная таблица в 1GB TMPFS из таблиц MYISAM по 15 Мб
    #38699484
kodm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сделал tmpfs директорию в оперативке и указал mysql писать туда временные таблицы и увидел интересную картину.

Запрос на вроде

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SELECT `content`.*, `catalog`.*, `rubrics_content`.`rubric_level`
				FROM `content`
				INNER JOIN `catalog` ON `catalog`.cat_field_prodcode=`content`.field_prodcode
				LEFT JOIN `rubrics_content` ON `content`.`id` = `rubrics_content`.`content_id`
				WHERE `rubrics_content`.`rubric_id` IN (16994,64587,26587,26586,26585,26584,26588,26646,26647,26582,26581,26583)
AND `content`.`parent_id` = 100
AND `content`.`show` = 1
AND (`catalog`.`cat_field_shop` != '777' OR `catalog`.`cat_field_shop` IS NULL)
GROUP BY `content`.`field_prodcode`
ORDER BY `cat_field_price` asc
LIMIT 0, 80



Таблицы все не более 20 Мб. А в директории временных таблиц во время этого запроса создается файл #sql_400_0.MYD размером чуть больше Гигабайта. Это как так?!

Я пробовал таблицу content сделать тип memory и она стала 1,3 Гб тогда когда она в формате MyIsam около 20 Мб. Наводит на мысли, что там в директории с временными файлами создается таблица типа memory. Но как?! Mysql же считает, что это простая директория, а не оперативная память! И расширение у файла соответствующее - *.MYD

Подскажите, почему так происходит?! Ведь если отправить парочку запросов одновременно или с разницей в пол секунды то памяти не хватит - у меня на директорию эту 1,5 Гб

EXPLAIN прилагаю
...
Рейтинг: 0 / 0
Откуда временная таблица в 1GB TMPFS из таблиц MYISAM по 15 Мб
    #38699511
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уберите слово LEFT из запроса. Оно все равно не нужно. А MySQL-ю, возможно, полегче станет.

Вместо звездочек перечислите только те поля, которые реально нужны, меньше будет гонятся на диск и по сети.

А за поля, которых нет в группировке, но есть в секциях SELECT и ORDER BY, пожалуй, в аду скоро отдельный котел организуют.

Memory так раздуваются за счет того, что в них под строки VARCHAR всегда выделяется полный объем памяти согласно декларации поля, а не по длине фактических данных. Относится ли это также к filesort-таблицам - не знаю.
...
Рейтинг: 0 / 0
Откуда временная таблица в 1GB TMPFS из таблиц MYISAM по 15 Мб
    #38699694
netwind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторТаблицы все не более 20 Мб. А в директории временных таблиц во время этого запроса создается файл #sql_400_0.MYD размером чуть больше Гигабайта. Это как так?!

ну что значит как ? Объединение, это когда берется одно значение в первой таблице и к нему "присоединяются" тысячи значений из другой. И так к каждому значению. То есть, при умении, можно из десятка строк сделать миллионы.
...
Рейтинг: 0 / 0
Откуда временная таблица в 1GB TMPFS из таблиц MYISAM по 15 Мб
    #38700209
kodm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
netwind,

Ну так это нормально? или запрос составлен не корректно и его нужно оптимизировать?
Может изменить порядок присоединения таблиц?
...
Рейтинг: 0 / 0
Откуда временная таблица в 1GB TMPFS из таблиц MYISAM по 15 Мб
    #38700273
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kodmnetwind,

Ну так это нормально? или запрос составлен не корректно и его нужно оптимизировать?
Может изменить порядок присоединения таблиц?

некорректно. GROUP BY `content`.`field_prodcode`

груп бай не по всем полям.
...
Рейтинг: 0 / 0
Откуда временная таблица в 1GB TMPFS из таблиц MYISAM по 15 Мб
    #38700280
netwind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kodm, вы спрашивали откуда так много временных данных - я вам описываю откуда. Поведение mysql нормальное.
Разумеется, стоит оптимизировать если вам это доставляет опасения. Для начала уже данные вам советы miksoft попробуйте
...
Рейтинг: 0 / 0
Откуда временная таблица в 1GB TMPFS из таблиц MYISAM по 15 Мб
    #38700445
kodm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoftУберите слово LEFT из запроса. Оно все равно не нужно. А MySQL-ю, возможно, полегче станет.
А за поля, которых нет в группировке, но есть в секциях SELECT и ORDER BY, пожалуй, в аду скоро отдельный котел организуют.


Да уж... Не вникал в эти детали.

Не понимаю зачем такое правило в "серьезных" БД?! Вот бралась первая попавшаяся запись и выводились бы поля от нее. Зачем ошибку то выводить?!

Ну ладно, допустим если я сделаю подзапросы (а другого выхода видимо нет), чтобы мой запрос работал как и прежде и выполнялось условие про GROUP BY. Но тогда я, пользователь MySql попрощаюсь с кешем, ибо насколько мне известно mysql не кеширует подзапросы...
...
Рейтинг: 0 / 0
Откуда временная таблица в 1GB TMPFS из таблиц MYISAM по 15 Мб
    #38700494
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kodmНе понимаю зачем такое правило в "серьезных" БД?! Вот бралась первая попавшаяся запись и выводились бы поля от нее. Зачем ошибку то выводить?!Тогда результат запроса был бы не детерминирован.
...
Рейтинг: 0 / 0
Откуда временная таблица в 1GB TMPFS из таблиц MYISAM по 15 Мб
    #38700559
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kodmНе понимаю зачем такое правило в "серьезных" БД?! Вот бралась первая попавшаяся запись и выводились бы поля от нее. Зачем ошибку то выводить?!и правда, вот при делении на ноль зачем ошибку выводить? проще же выдать какое-нибудь число от балды!
...
Рейтинг: 0 / 0
Откуда временная таблица в 1GB TMPFS из таблиц MYISAM по 15 Мб
    #38700562
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kodmНу ладно, допустим если я сделаю подзапросы (а другого выхода видимо нет), чтобы мой запрос работал как и прежде и выполнялось условие про GROUP BY. Но тогда я, пользователь MySql попрощаюсь с кешем, ибо насколько мне известно mysql не кеширует подзапросы...откуда на этой неделе такой наплыв спецеолиздофф? каникулы вроде бы давно уже начались...
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Откуда временная таблица в 1GB TMPFS из таблиц MYISAM по 15 Мб
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]