¿Puedo matar OPTIMIZE TABLE de forma segura en una tabla InnoDB?


9

La documentación de MySQL para kill advierte :

Advertencia

Matar una operación REPAIR TABLEu OPTIMIZE TABLEen una MyISAMtabla da como resultado una tabla que está dañada e inutilizable. Cualquier lectura o escritura en dicha tabla fallará hasta que la optimice o repare nuevamente (sin interrupción).

Eso es para MyISAM.

¿También es inseguro matar un OPTIMIZE TABLEproceso que se ejecuta contra una tabla InnoDB?

Respuestas:


8

De acuerdo con la Guía de certificación de MySQL:

La instrucción OPTIMIZE TABLE limpia una tabla MyISAM al desfragmentarla. Esto implica recuperar espacio no utilizado como resultado de eliminaciones y actualizaciones, y fusionar registros que se han dividido y almacenado de forma no contigua. OPTIMIZE TABLE también clasifica las páginas de índice si están fuera de servicio y actualiza las estadísticas del índice

También funciona para tablas InnoDB, pero se asigna a ALTER TABLE, que reconstruye la tabla. Esto actualiza las estadísticas del índice y libera espacio en el índice agrupado.

Entonces, en caso de InnoDB:

Innodb es compatible con ACID, la tabla de optimización simplemente copia todos los registros en una nueva tabla

  1. Si las páginas de índice no están ordenadas, ordénelas,
  2. Si las estadísticas de la tabla no están actualizadas (y la reparación no se pudo realizar clasificando el índice), actualícelas.
  3. Si la tabla ha eliminado o dividido filas, repare la tabla.

Y si intentas matarlo cuando se está ejecutando, no perderás ningún registro.

Además, en el caso de InnoDB con innodb_defragment=1, no se requerirá ROLLBACK, ya que en este caso OPTIMIZE TABLEes incremental.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.