Ao otimizar tabelas, SHOW PROCESSLIST lista como "copiando para tabela tmp". Estou tentando garantir que a cópia ocorra na memória para acelerar o processo. Tentei ajustar o tmp_table_size para acomodar a tabela 5G. No entanto, não vi ganho de desempenho zero. Alterei o diretório temporário para tmpfs, mas, novamente, ganho zero. Na verdade, independentemente das configurações que altero, a tabela tmp sempre parece ser gravada em arquivos temporários, no disco, dentro do diretório do banco de dados.
Presumo que os dados sejam gravados no disco de maneira rotativa da tabela por segurança, mas estou me perguntando se há alguma maneira de direcionar o processo de otimização para criar a tabela temporária na memória?
Obrigado!
Lembre-
OPTIMIZE TABLE
se de que DDL não é DML.Em termos de mecanismo, é isso que
OPTIMIZE TABLE mydb.mytable;
faz sob o capôou
Como é DDL, o mysqld não tem nenhuma razão plausível para copiar a tabela para a memória.
BTW para InnoDB, você pode fazer isso manualmente se quiser pular
ANALYZE TABLE mydb.mytable;
Mesmo se você fizer isso
ANALYZE TABLE mydb.mytable;
, o InnoDB fará mergulhos profundos no índice de qualquer maneira para fazer aproximações de cardinalidade (Veja minha postagem De onde o MySQL Query Optimizer lê as estatísticas do índice? ).