Estrictamente desde un punto de vista de MySQL, tengo sugerencias sobre cómo mejorar el almacenamiento en caché de los datos / índices para una instancia de MySQL.
Tenga en cuenta que hay dos motores de almacenamiento principales para MySQL
Sus mecanismos de almacenamiento en caché son diferentes. Hay algo que puede hacer para ajustar el motor de almacenamiento de su elección.
MyISAM
MyISAM solo almacena en caché páginas de índice. Nunca almacena datos en caché. Puede hacer dos cosas para mejorar la E / S de las tablas MyISAM.
Mejora de MyISAM # 1
Cualquier tabla MyISAM que tenga columnas VARCHAR puede convertirse internamente a CHAR sin tocar el diseño inicial. Supongamos que tiene una tabla llamada mydb.mytable y desea mejorar la E / S para ella, realice lo siguiente:
ALTER TABLE mydb.mytable ROW_FORMAT=Fixed;
Esto aumentará el tamaño de la tabla 60% -100% pero producirá un aumento del rendimiento del 20-30% en I / O sin cambiar nada más . Escribí sobre esto antes en el DBA StackExchange:
Mejora de MyISAM # 2
Debe aumentar el caché de claves MyISAM (según el tamaño de < strong> key_buffer_size ). Ejecuta esta consulta, por favor:
SELECT CONCAT(ROUND(KBS/POWER(1024,
IF(PowerOf1024<0,0,IF(PowerOf1024>3,0,PowerOf1024)))+0.4999),
SUBSTR(' KMG',IF(PowerOf1024<0,0,
IF(PowerOf1024>3,0,PowerOf1024))+1,1))
recommended_key_buffer_size FROM
(SELECT LEAST(POWER(2,32),KBS1) KBS
FROM (SELECT SUM(index_length) KBS1
FROM information_schema.tables WHERE engine='MyISAM' AND
table_schema NOT IN ('information_schema','mysql','performance_schema')) AA ) A,
(SELECT 2 PowerOf1024) B;
Esto te mostrará el tamaño ideal de key_buffer_size basado en tu conjunto de datos actual.
InnoDB
InnoDB almacena en caché los datos y los índices. Si convirtió todos sus datos a InnoDB y actualmente está ejecutando WordPress desde una base de datos InnoDB, necesita dimensionar su grupo de búfer InnoDB (dimensionado con innodb_buffer_pool_size ). Ejecuta esta consulta, por favor:
SELECT CONCAT(ROUND(KBS/POWER(1024,
IF(PowerOf1024<0,0,IF(PowerOf1024>3,0,PowerOf1024)))+0.49999),
SUBSTR(' KMG',IF(PowerOf1024<0,0,
IF(PowerOf1024>3,0,PowerOf1024))+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 PowerOf1024) B;
Esto te mostrará el tamaño ideal de key_buffer_size basado en tu conjunto de datos actual.
Proyecciones
Si proyecta que su conjunto de datos crecerá 20 veces más, solo multiplique lo que esta consulta recomienda para 20. Suponga que su conjunto de datos MyISAM es de 15 MB y 3 MB es la suma de sus índices. Si estima que tendrá 20 veces más datos, establezca key_buffer_size a 60MB como este en /etc/my.cnf:
[mysqld]
key_buffer_size=60M
luego reinicie MySQL. Lo mismo se aplicaría al InnoDB Buffer Pool.
Si todos sus datos son InnoDB, debe realizar una Limpieza completa de su infraestructura InnoDB que publiqué en StackOverflow .