Qualquer erro de configuração pode levar à criação de muitas tabelas temporárias pelo mysql..mysql tuner shows
Current max_heap_table_size = 200 M
Current tmp_table_size = 200 M
Of 17158 temp tables, 30% were created on disk
table_open_cache = 125 tables
table_definition_cache = 256 tables
You have a total of 97 tables
You have 125 open tables.
Current table_cache hit rate is 3%
A tabela temporária anterior era "das 23725 tabelas temporárias, 38% foram criadas no disco", mas eu mudei max_heap e tmp_table para 200m de 16m para 200m e baixei para 30%.
Configuração:
engine myisam
group_concat_max_len = 32768
key_buffer_size = 3.7 GB,
thread_stack = 256k,
table_cache = 125
query_cache_limit = 1M
query_cache_size = 16M
join_buffer_size = 2.00 M
max_connections = 800
Outro sistema com configuração padrão está exibindo "de 23725 tabelas temporárias, 1% foram criadas em disco" com o mesmo banco de dados.
Tentei mudar para o padrão na máquina com esse problema e ele ainda mostra "Das 580 tabelas temporárias, 16% foram criadas no disco".
Estou usando o Ubuntu 11.4 de 64 bits com 48 gb de ram. Alguém pode sugerir uma solução?
Alterar o mecanismo db de "myisam" para "memory" nas tabelas usando "group by" corrige isso? Conforme explicado aqui: http://www.mysqlperformanceblog.com/2007/08/16/how-much-overhead-is-caused-by-on-disk-temporary-tables/
tmp_table_size
oumax_heap_table_size
"using temporary" e "using filesort" não são o fim do mundo!
SELECIONE ... GRUPO POR a, b PEDIDO POR c, d - Requer 1 ou 2 "tabelas temporárias".
Há simplesmente momentos em que suas consultas usam tabelas temporárias. As tabelas temporárias podem atrasar uma consulta por um pequeno fator. Mas se a consulta ainda for "rápida o suficiente", não se preocupe.
Se a consulta for muito lenta (com ou sem tabelas tmp), vamos discuti-la. Forneça SHOW CREATE TABLE, SHOW TABLE STATUS e EXPLAIN.
fonte
(a, b, c, d)
, não haverá nenhuma tabela temporária.