Небезызвестный 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
Рад услышать любые ваши мысли по данной теме.