Estrictamente desde un punto de vista de MySQL, tengo sugerencias sobre cómo mejorar el almacenamiento en caché de 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é las páginas de índice. Nunca almacena datos en caché. Puede hacer dos cosas para mejorar la E / S para las tablas MyISAM.
Mejora MyISAM # 1
Cualquier tabla MyISAM que tenga columnas VARCHAR se puede convertir 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 en un 60% -100%, pero producirá un aumento del rendimiento del 20-30% en E / S sin cambiar nada más . Escribí sobre esto antes en el DBA StackExchange:
Mejora MyISAM # 2
Debe aumentar el caché de claves MyISAM (según el tamaño de key_buffer_size ). Ejecute 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 le mostrará el key_buffer_size ideal basado en su conjunto de datos actual.
InnoDB
InnoDB almacena en caché tanto los datos como los índices. Si convirtió todos sus datos a InnoDB y actualmente está ejecutando WordPress desde una base de datos completa de InnoDB, deberá dimensionar su InnoDB Buffer Pool (dimensionado con innodb_buffer_pool_size ). Ejecute 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 le mostrará el key_buffer_size ideal basado en su conjunto de datos actual.
Proyecciones
Si proyecta que su conjunto de datos crecerá 20 veces más, solo multiplique lo que recomienda esta consulta en 20. Suponga que su conjunto de datos MyISAM es 15MB y 3MB es la suma de sus índices. Si estima que tendrá 20 veces más datos, configure key_buffer_size en 60MB de esta manera 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 de InnoDB que publiqué en StackOverflow .