Strictement d'un point de vue MySQL, j'ai des suggestions sur la façon d'améliorer la mise en cache des données / index pour une instance MySQL.
Gardez à l'esprit qu'il existe deux principaux moteurs de stockage pour MySQL
Leurs mécanismes de mise en cache sont différents. Il y a quelque chose que vous pouvez faire pour régler le moteur de stockage de votre choix.
MyISAM
MyISAM ne met en cache que les pages d'index. Il ne met jamais en cache les données. Vous pouvez faire deux choses pour améliorer les E / S des tables MyISAM.
Amélioration MyISAM # 1
Toute table MyISAM qui possède des colonnes VARCHAR peut être convertie en interne en CHAR sans toucher à la conception initiale. Supposons que vous ayez une table appelée mydb.mytable et que vous souhaitiez améliorer les E / S pour cela, procédez comme suit:
ALTER TABLE mydb.mytable ROW_FORMAT=Fixed;
Cela augmentera la taille de la table de 60% à 100% mais entraînera une augmentation des performances de 20 à 30% des E / S sans rien changer d'autre . J'ai déjà écrit à ce sujet dans le DBA StackExchange:
Amélioration MyISAM # 2
Vous devez augmenter le cache de clés MyISAM (tel que dimensionné par key_buffer_size ). Exécutez cette requête, veuillez:
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;
Cela vous montrera la taille de clé_buffer_ idéale en fonction de votre ensemble de données actuel.
InnoDB
InnoDB met en cache les données et les index. Si vous avez converti toutes vos données en InnoDB et exécutez actuellement WordPress à partir d'une base de données entièrement InnoDB, vous devez dimensionner votre pool de tampons InnoDB (dimensionné avec innodb_buffer_pool_size ). Exécutez cette requête, veuillez:
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;
Cela vous montrera la taille de clé_buffer_ idéale en fonction de votre ensemble de données actuel.
Projections
Si vous prévoyez que votre ensemble de données augmentera de 20 fois, multipliez ce que cette requête recommande par 20. Supposons que votre ensemble de données MyISAM soit de 15 Mo et 3 Mo est la somme de vos index. Si vous estimez que vous aurez 20 fois plus de données, définissez key_buffer_size sur 60 Mo comme ceci dans /etc/my.cnf:
[mysqld]
key_buffer_size=60M
puis redémarrez MySQL. La même chose s'appliquerait au pool de tampons InnoDB.
Si toutes vos données sont InnoDB, vous devez effectuer un nettoyage complet de votre infrastructure InnoDB que j'ai publié dans StackOverflow .