MySQL 8 - otimizar todas as tabelas + índices

Nov 27 2020

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

1 RickJames Nov 29 2020 at 14:36

Não se preocupe. O InnoDB cuida principalmente de si mesmo. OPTIMIZEtemporariamente 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.

1 RolandoMySQLDBA Nov 27 2020 at 04:39

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 mysql
  • Aug 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.