MySQL 8 - otimizar todas as tabelas + índices
Eu tenho um monte de tabelas (InnoDB) em vários bancos de dados (MySQL 8), nas quais executo scripts do Garbage Collect, diariamente, removendo registros obsoletos que não são mais necessários. Todas as tabelas possuem índices.
Faria sentido / seria benéfico otimizar todas as tabelas, digamos todas as semanas, para aumentar o desempenho? Em caso afirmativo, há um bom comando a ser executado, para fazer isso?
Eu tentei fazer
sudo mysqlcheck -o --all-databases
Mas receba a seguinte mensagem de erro:
note : Table does not support optimize, doing recreate + analyze instead
status : OK
Respostas
Não se preocupe. O InnoDB cuida principalmente de si mesmo. OPTIMIZE
temporariamente elimina algum espaço desperdiçado, mas ocorre novo desperdício à medida que as inserções / etc acontecem. O benefício de desempenho de OPTIMIZE
é próximo a zero.
Essas mensagens são normais para InnoDB. Você pode continuar fazendo isso.
O InnoDB Storage Engine funciona OPTIMIZE TABLE mydb.mytable;
assim
ALTER TABLE mydb.mytable ENGINE=InnoDB;
ANALYZE TABLE mydb.mytable;
Eu mencionei isso ao longo dos anos:
Sep 27, 2015
: Como posso desfragmentar tabelas no MySQL?Jun 24, 2015
: diretriz para chamar a tabela de otimização após a alteração da tabela?Feb 27, 2013
: Qual é a diferença entre otimizar tabela e analisar tabela no mysqlAug 04, 2011
: Otimizando as configurações padrão do InnoDB
Eu recomendo fazer a análise diária ou semanal
sudo mysqlcheck --analyze --all-databases
Em seguida, faça a otimização uma vez por mês ou uma vez por trimestre.