Eu tenho um diretório tmpfs de 768 milhões que uso para o diretório temporário mysql. Ocasionalmente, ele fica cheio ao executar relatórios em grandes intervalos de datas. Quando isso acontece, o relatório falha e recebo um erro 28.
Na verdade, isso parece aceitável para mim porque evita que uma consulta seja executada por muito tempo e sobrecarregue o servidor. (Eu penso)
A vantagem de usar o tmpfs é que as consultas que usam tabelas temporárias são executadas 50% mais rápido.
Minha pergunta é: o tmpfs é preenchido enquanto uma inserção ou substituição está em execução, isso falhará?
Também parece que quando o mysql preenche o diretório, os arquivos são excluídos quando a consulta falha. Haverá algum caso em que isso não aconteça?
Você acha que eu poderia causar algum problema usando /tmp para o diretório temporário do MySQL? Tenho cerca de 50 conexões simultâneas, mas nem todas estão executando relatórios ao mesmo tempo.
Quais são os prós e os contras de não usar o tmpfs?
Se todas as suas 50 conexões quiserem fazer SELECTs que precisam de tabelas tmp, mesmo as pequenas, elas podem estourar tmpfs e falhar à direita e à esquerda.
Eu prefiro deixar as tabelas tmp estarem no mesmo sistema de arquivos onde todo o resto está. Dessa forma, não está causando problemas arbitrariamente quando há um aumento no tráfego.
Enquanto isso, acompanho o registro lento e abordo agressivamente todas as consultas lentas. Observe que as consultas que usam a tabela tmp grande tendem a ser lentas, portanto, o slowlog geralmente as captura.
Geralmente, otimizar uma consulta fornecerá uma melhoria de muito mais do que 50%.
A otimização das consultas diminui a "carga".
50 conexões simultâneas realmente ativas em execução simultânea (não apenas "Sleep" em SHOW PROCESSLIST) são inaceitáveis em meu livro.
Quando uma consulta morre, ela deve remover a tabela tmp. Se o servidor travar, há uma chance de que a tabela tmp permaneça. Isso geralmente acontece com ALTER.
Quando uma operação de gravação morre no meio e a tabela é Engine=MyISAM, a gravação será parcialmente concluída e não há como saber o quanto foi feito ou não. Exemplos:
INSERT ... SELECT ...
eDELETE ... WHERE ... SELECT ...