Performances WordPress : surveillez les requêtes MySql !
Après avoir réinstallé le serveur qui héberge ce site et un autre beaucoup plus lu que celui-ci, j’ai pu constaté grâce à la commande htop que la charge du CPU du serveur atteignait très fréquemment 100%. Elle est, pour l’essentiel, liée à des montées en charge du serveur Apache. Certains de ces pics sont provoqués par le temps d’attente liée à l’exécution de requêtes Sql sur-numéraires et mal écrites.
Analyse des requêtes lentes (slow queries) sous MySql (hébergement dédié seulement)
Ces opérations ne sont réalisables que sur un serveur dédié de type dedibox, disposant d’un accès SSH. Après vous être connecté à votre serveur, créez le répertoire /var/log/mysql en donnant les droits à l’utilisateur mysql (sous Centos) :
mkdir /var/log/mysql
chown mysql:mysql /var/log/mysql -R
Editez le fichier /etc/my.cnf et ajoutez-y, dans la section [mysqld] les lignes suivantes :
log-slow-queries=/var/log/mysql/slow-queries.log
log-error=/var/log/mysql/error.log
long_query_time = 1
L’unité de la directive long_query_type est la seconde. Or une seconde pour une requête, ça commence à faire !!! L’installation de très nombreux plugins sous WordPress peut avoir des conséquences assez désastreuses, compte tenu de l’incompétence des développeurs en matière de SQL. Pour vous en rendre compte, il suffit de taper à partir de la ligne de commandes et de naviguer sur votre blog WordPress :
tail -f /var/log/mysql/slow-queries.log
Action n°1 : créez des index ! (pour tous les types d’hébergement)
Vous devez, au préalable, vous connecter à MySql : mysql -u root -p
Pour accélérer les accès à la base de vos billets, ajoutez un index sur la colonne post_status de la table wp_posts, la colonne autoload de la table wp_options, la colonne meta_value de la table wp_postmeta à l’aide de la commande :
CREATE INDEX idx_post_status ON wp_posts(post_status)
CREATE INDEX idx_meta_value ON wp_postmeta(meta_value);
CREATE INDEX idx_autoload ON wp_options(autoload);
Si vous utilisez les plugins Similar Posts et WP-Sticky, là-encore, vous pouvez ajouter un index :
CREATE INDEX idx_pid ON wp_similar_posts(pID);
CREATE INDEX idx_sticky_status ON wp_sticky(sticky_status);
Cette liste n’est hélas pas exhaustive.
Action n°2 : diminuez la quantité de tags (pour tous les types d’hébergement)
La gestion des tags (mots-clefs), utile au référencement, est sous WordPress consommatrice de ressources importantes. Vous devez impérativement en diminuer le nombre.
A partir de l’interface d’administration de WordPress, allez dans Articles->Mots-clefs pour procéder à la suppression des catégories.
Action n°3 : suppression des révisions (pour tous les types d’hébergement)
Par défaut, WordPress consigne les révisions de vos articles. C’est autant de copies des originaux qui contribuent à augmenter la taille de votre base de posts, wp_posts. Pour effacer vos révisions :
DELETE FROM wp_posts WHERE post_type=’revision' »
Vous pouvez désactiver les révisions en modifiant votre fichier wp-config.php :
define(‘WP_POST_REVISIONS’,false);
Vous pouvez faire aussi le choix d’une requête que vous exécutez à l’aide du planificateur de tâches sous Linux, cron (paquet vixie-cron sous Centos), qui exécute un script php ou mysql, effaçant l’ensemble des versions de révision, à l’aide de la commande présentée ci-dessus.