1 votes

MySQL - Requête lente - table wp_options. Le site Web ne peut pas gérer le trafic

Après avoir passé plusieurs jours à faire des recherches, j'ai placé un site web sur une instance c1.medium, Amazon Linux, et la base de données MySQL sur une instance db.m1. Le RDS exécute la version 5.6.13 de MySQL. J'ai alloué 100 Go à l'instance de la base de données et j'ai fixé l'IOPS à 1 000. Le site Web est basé sur des photos, autorise les téléchargements par les utilisateurs et accueille plus de 400 visiteurs aux heures de pointe.

Une fois que j'ai activé la journalisation des requêtes lentes, j'ai constaté que le problème semble provenir de la table wp_options, qui, en regardant dans phpmyadmin, contient des informations sur les plug-ins et le thème WordPress. Ex :

SET timestamp=1390186963 ;

SELECT option_name, option_value FROM wp_options WHERE autoload = 'yes' ;

Heure : 140120 3:04:17

Utilisateur@Host : xxxx Id : 744

Temps d'interrogation : 49.248039 Lock_time : 0.000180 Rows_sent : 485 Rows_examinés : 538

Après avoir expérimenté quelques paramètres de la base de données, j'ai défini le type de cache de requête (query_cache_type) sur 1 et la taille du cache de requête (query_cache_size) sur 64 Mo. J'espérais que l'activation de la mise en cache empêcherait la base de données d'appeler de façon répétée la table wp_options, mais cela ne semble malheureusement pas être le cas. Avez-vous des suggestions ? Quelles seraient les prochaines étapes à suivre pour trouver la cause de ce problème ? En regardant les métriques CloudWatch, le matériel semble être suffisant, mais peut-être pas ?

Vous trouverez ci-dessous des captures d'écran des mesures de CloudWatch pour les deux instances.

EC2

RDS

1voto

Glen Solsberry Points 1476
Query_time: 49.248039 Lock_time: 0.000180 Rows_sent: 485 Rows_examined: 538

D'après votre journal des requêtes lentes, cela implique que l'exécution de cette requête a pris 49 secondes. Essayez d'exécuter

CREATE INDEX wp_options_autoload ON wp_options (autoload);

Et ensuite, essayez de charger vos pages à nouveau.

Bien qu'avec seulement 538 lignes dans le tableau, c'est une extrêmement longtemps pour que cette requête soit exécutée.

-1voto

Pestouille Points 1

1 000 IOPS, c'est beaucoup trop de provisionnement.

Les IOPS sont intéressantes lorsque vous lisez/écrivez beaucoup sur le disque. Wordpress devrait utiliser 90% de lecture et 10% d'écriture. Vous devriez utiliser le cache mémoire la plupart du temps.

Si votre base de données et vos requêtes sont correctement configurées, vous n'avez pas besoin de tant d'IOPS.

Compte tenu du nombre de personnes qui utilisent Wordpress (je ne connais pas ce plugin en particulier), je parierais que les requêtes sont correctement configurées.

RDS est limité au moteur InnoDB. Ce moteur s'appuie sur un paramètre appelé innodb_buffer_pool_size pour la mise en cache des données en mémoire. C'est celui dont il faut s'occuper en premier lieu. Heureusement, cette valeur est automatiquement définie par RDS (un facteur de la mémoire dont vous disposez dans votre instance RDS).

49 ms, ce n'est pas si lent. Je parie que votre problème est ailleurs. Essayez un outil qui analysera vos requêtes lentes (les ordonner et les agréger) : http://www.percona.com/doc/percona-toolkit/2.2/pt-query-digest.html

Pour récupérer le fichier journal des requêtes lentes : http://www.palominodb.com/blog/2011/10/20/exporting-mysqlslowlog-table-slow-query-log-format

La plupart du temps, vous n'avez pas besoin de jouer avec le paramètre query_cache. Si vous définissez une valeur trop élevée, vous risquez même d'être pénalisé au niveau des performances (chaque fois que vous modifiez une donnée, vous devez invalider le cache pour la requête correspondante).

Enfin, les graphiques de Cloudwatch montrent que votre base de données est en sommeil mais que votre serveur web utilise trop de CPU.

Le goulot d'étranglement ici n'est certainement pas votre base de données.

-1voto

jdog Points 251

Vous pourriez changer wp_options pour qu'il s'agisse de MEMOIRE. Pour cela, vous devez convertir tout blob en grand varchar et augmenter la taille du tas dans RDS.

Cependant, il peut aussi être plus judicieux de résoudre ce problème en plaçant un serveur de mise en cache devant WordPress pour éliminer les requêtes.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X