MySQL 8 - optimizar todas las tablas + índices

Nov 27 2020

Tengo un montón de tablas (InnoDB) dentro de varias bases de datos (MySQL 8), en las que ejecuto scripts de Garbage Collect, a diario, eliminando registros obsoletos que ya no son necesarios. Todas las tablas tienen índices.

¿Tendría sentido / sería beneficioso optimizar todas las tablas, digamos cada semana, para aumentar el rendimiento? Si es así, ¿hay un buen comando para ejecutarlo?

Intenté hacer

sudo mysqlcheck -o --all-databases

Pero recibe el siguiente mensaje de error:

note     : Table does not support optimize, doing recreate + analyze instead
status   : OK

Respuestas

1 RickJames Nov 29 2020 at 14:36

No se moleste. InnoDB se encarga principalmente de sí mismo. OPTIMIZEExprime temporalmente un poco de espacio desperdiciado, pero se producen nuevos desperdicios a medida que ocurren las inserciones / etc. El beneficio de rendimiento de OPTIMIZEes casi nulo.

1 RolandoMySQLDBA Nov 27 2020 at 04:39

Esos mensajes son normales para InnoDB. Puedes seguir haciéndolo.

El motor de almacenamiento InnoDB funciona OPTIMIZE TABLE mydb.mytable;así

ALTER TABLE mydb.mytable ENGINE=InnoDB;
ANALYZE TABLE mydb.mytable;

He mencionado esto a lo largo de los años:

  • Sep 27, 2015: ¿Cómo puedo desfragmentar tablas en MySQL?
  • Jun 24, 2015: ¿ guía para llamar a optimizar tabla después de alterar tabla?
  • Feb 27, 2013: ¿Cuál es la diferencia entre optimizar la tabla y analizar la tabla en mysql?
  • Aug 04, 2011: Optimización de la configuración predeterminada de InnoDB

Recomiendo hacer análisis diario o semanal

sudo mysqlcheck --analyze --all-databases

Luego, optimice una vez al mes o una vez al trimestre.