La forma de sintonizar InnoDB se centra en
- InnoDB Buffer Pool: almacena en caché las páginas de datos y las páginas de índice. La cantidad de datos e índice que puede almacenar en caché no es una función de las limitaciones de espacio en disco, sino una función de memoria disponible y espacio en disco utilizado actualmente por InnoDB.
- InnoDB MetaData: por defecto, el archivo ibdata1 normalmente alberga cualquier cosa y todo InnoDB. Eso incluiría páginas de datos, páginas de índice, metadatos de tabla, datos MVCC .
Aquí hay una fórmula que he usado durante los últimos 5 años para calcular el InnoDB Buffer Pool basado en el espacio en disco utilizado por los datos de InnoDB y las páginas de índice :
SELECT CONCAT(ROUND(KBS/POWER(1024,IF(Power1024<0,0,
IF(Power1024>3,0,Power1024)))+0.49999),SUBSTR(' KMG',IF(Power1024<0,0,
IF(Power1024>3,0,Power1024))+1,1)) recommended_innodb_buffer_pool_size
FROM (SELECT SUM(data_length+index_length) KBS FROM information_schema.tables
WHERE engine='InnoDB') A,(SELECT 2 Power1024) B;
- Usar (SELECCIONAR 0 Power1024) para bytes
- Usar (SELECCIONAR 1 Power1024) para KB
- Usar (SELECT 2 Power1024) para MB
- Usar (SELECT 3 Power1024) para GB
- Use (SELECT 4 Power1024) para TB (envíeme un correo electrónico si tiene TerraBytes de RAM)
Por supuesto, dije una función de memoria disponible y espacio en disco utilizado actualmente por InnoDB. A partir de aquí, solo use el sentido común. ¡El número recomendado de la consulta anterior NO DEBE SUPERAR EL 75% DE LA RAM INSTALADA! Esa es la regla general más simple para dimensionar el InnoDB Buffer Pool.
También debe establecer innodb_flush_method en O_DIRECT ya que proporcionará escrituras síncronas estables de InnoDB. También he escrito una publicación sobre cómo optimizar el almacenamiento en disco para InnoDB .
Con respecto al mensaje, la tabla no admite la optimización, al recrear + analizar en su lugar , la razón por la que recibe ese mensaje de error es el hecho de que el motor de almacenamiento es InnoDB. Mecánicamente, OPTIMIZE TABLE simplemente copia la tabla a una tabla temporal y realiza ANALYZE TABLE .
En realidad, ANALYZE TABLE contra InnoDB es completamente inútil. Incluso si ejecutó ANALYZE TABLE en una tabla de InnoDB, el motor de almacenamiento de InnoDB realiza inmersiones en el índice para aproximaciones de cardinalidad una y otra vez, lo que destruye las estadísticas que acaba de compilar. De hecho, Percona realizó algunas pruebas en la TABLA DE ANÁLISIS y llegó a la misma conclusión también .
Aquí hay otras publicaciones que hice durante el año sobre InnoDB Tuning