Depois que o MySQL é executado há algum tempo (geralmente de 4 a 6 horas), algumas consultas maiores e com mais carga intensiva (até a reinicialização) falham, retornando o seguinte erro:
Can't create/write to file '#sql_75ed_0.MYD' (Errcode: 17)
Pesquisando este erro, ele retorna muitas causas prováveis, mas acho que isso pode ser resolvido em dois métodos fáceis;
1) Otimize as consultas. (Uma boa solução para o longo prazo.)
2) Ajuste a configuração do MySQL de alguma forma. (Isso é o que eu quero fazer)
À luz da pergunta, aqui estão os nossos valores não padrão atuais em my.cnf:
query_cache_size = 8M
query_cache_limit = 8M
thread_cache_size = 4
max_connections = 90
table_cache = 4096
innodb_buffer_pool_size = 900M
tmp_table_size = 512M
max_heap_table_size = 256M
innodb_file_per_table
Estou inclinado a acreditar que podemos notar ganhos significativos de desempenho ajustando essas variáveis ainda mais, mas essa é uma questão pendente de perguntas posteriores.
Aqui está uma consulta de exemplo que começa a falhar:
SELECT DISTINCT u.user_id, u.username, u.username_clean, u.user_colour, MAX(s.session_time) as online_time, MIN(s.session_viewonline) AS viewonline FROM (table_users u, table_zebra z) LEFT JOIN table_sessions s ON (s.session_user_id = z.zebra_id) WHERE z.user_id = 4 AND z.friend = 1 AND u.user_id = z.zebra_id GROUP BY z.zebra_id, u.user_id, u.username_clean, u.user_colour, u.username ORDER BY u.username_clean ASC
O resultado EXPLAIN da consulta acima retorna o seguinte:
1, 'SIMPLE', 'z', 'ref', 'PRIMARY,zebra_id_friend', 'PRIMARY', '3', 'const', 18, 'Using where; Using temporary; Using filesort'
1, 'SIMPLE', 's', 'ref', 'session_user_id', 'session_user_id', '3', 'database_name.z.zebra_id', 402, ''
1, 'SIMPLE', 'u', 'eq_ref', 'PRIMARY', 'PRIMARY', '3', 'database_name.z.zebra_id', 1, ''
Qualquer ajuda seria apreciada!