Что стоит учитывать при выборе значения tmp_table_size?

Небезызвестный tuning-primer на одном из моих продакшенов настойчиво рекомендует увеличивать значение tmp_table_size:

TEMP TABLES
Current max_heap_table_size = 8.00 G
Current tmp_table_size = 8.00 G
Of 3072 temp tables, 26% were created on disk
Perhaps you should increase your tmp_table_size and/or max_heap_table_size
to reduce the number of disk-based temporary tables


Сервер ворочает префетчером большую базу со статистикой (> 200 млн. строк, > 25 Гб данных, > 10 Гб индексов), так что джойны на много гигабайт — явление легитимное и ожидаемое.

По словам того же tuning-primer, увеличение значения данной переменной не влияет на выделение памяти:

при 8 Гб:

MEMORY USAGE
Max Memory Ever Allocated : 27.27 G
Configured Max Per-thread Buffers : 11.82 G
Configured Max Global Buffers : 26.92 G
Configured Max Memory Limit : 38.75 G
Physical Memory : 49.00 G
Max memory limit seem to be within acceptable norms


при 12 Гб:

MEMORY USAGE
Max Memory Ever Allocated : 26.99 G
Configured Max Per-thread Buffers : 11.82 G
Configured Max Global Buffers : 26.92 G
Configured Max Memory Limit : 38.75 G
Physical Memory : 49.00 G
Max memory limit seem to be within acceptable norms


Так зачем же тогда она вообще нужна (разве существуют ситуации, когда выгодно сбрасывать tmp-таблицы на диск?), и чем руководствоваться, выбирая её наибольшее значение (кроме объема физической памяти на сервере, ясное дело)?

Мануал не проливает свет на этот вопрос — dev.mysql.com/doc/refman/5.1/en/server-system-variables.html#sysvar_tmp_table_size

Рад услышать любые ваши мысли по данной теме.
  • Вопрос задан
  • 13272 просмотра
Пригласить эксперта
Ответы на вопрос 2
@airo
случайно наткнулся на этот пост в гугле. не могу не удержаться и понекрофильствовать.

вместе с tmp_table_size обязательно нужно увеличивать max_heap_table_size (максимальный размер memory таблиц)
Ответ написан
Комментировать
@contor
Цитата

If an in-memory temporary table exceeds the limit, MySQL automatically converts it to an on-disk MyISAM table. Increase the value of tmp_table_size (and max_heap_table_size if necessary) if you do many advanced GROUP BY queries and you have lots of memory.

Дело в модели памяти, используемой для хранения. Формат хранения в памяти (возможно innoDB) оптимизирован для операций группировки…
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы