Есть две вещи, которые вы можете сделать, чтобы уменьшить влияние этого
ОПЦИЯ # 1: Увеличить переменные tmp_table_size и / или max_heap_table_size
Эти параметры определяют, насколько большой может быть временная таблица в памяти, прежде чем она будет считаться слишком большой, а затем страницы на диск как временная таблица MyISAM. Чем больше эти значения, тем менее вероятно, что вы получите «копирование в таблицу tmp на диске». Пожалуйста, убедитесь, что на вашем сервере достаточно ОЗУ и max_connections имеет умеренную конфигурацию, если для одного соединения с БД требуется много ОЗУ для собственных временных таблиц.
ОПЦИЯ № 2: Использовать RAM-диск для таблиц tmp
Вы должны иметь возможность настроить RAM-диск в Linux, а затем установить tmpdir в mysql как папку, в которой установлен RAM-диск.
Для начала настройте RAM диск в ОС
Создать в Linux папку с именем / var / tmpfs
mkdir /var/tmpfs
Затем добавьте эту строку в / etc / fstab (например, если вы хотите 16 ГБ ОЗУ)
none /var/tmpfs tmpfs defaults,size=16g 1 2
и перезагрузите сервер.
Примечание: можно создать диск RAM без перезагрузки. Просто не забудьте добавить вышеупомянутую строку в / etc / fstab, чтобы получить RAM-диск после перезагрузки сервера.
Теперь для MySQL:
Добавьте эту строку в /etc/my.cnf
[mysqld]
tmpdir=/var/tmpfs
и перезапустите mysql.
ВАРИАНТ № 3: Получить таблицу tmp на RAM-диск КАК МОЖНО СКОРЕЕ (при условии, что сначала вы применяете ОПЦИЮ № 2)
Возможно, вы захотите как можно быстрее принудительно вставить таблицы tmp на диск RAM, чтобы MySQL не вращал колеса, перемещая большие таблицы tmp в памяти на диск RAM. Просто добавьте это в /etc/my.cnf:
[mysqld]
tmpdir=/var/tmpfs
tmp_table_size=2K
и перезапустите mysql. Это приведет к появлению даже самой маленькой временной таблицы прямо на RAM-диске. Вы можете периодически запускать ls -l /var/tmpfs
, чтобы наблюдать, как временные таблицы приходят и уходят.
Дай попробовать !!!
CAVEAT
Если вы видите только временные таблицы в / var / tmpfs 24/7, это может повлиять на функциональность / производительность ОС. Чтобы убедиться, что / var / tmpfs не переполнен, изучите настройку ваших запросов. Как только вы это сделаете, вы должны увидеть меньше материализованных таблиц tmp в /var/tmpfs.