Le 3 févr. 2012 à 13:46, Bourhis Yves a écrit :

> Bonjour,
> 
> j'ai un soucis avec les temps de réponse de mon serveur MySQL sur des 
> requêtes provenant de l'interface d'administration de Django.
> J'ai une table contenant 9 clés étrangères (certaines sur la même table), qui 
> ne contient même pas 50 lignes et les tables liées pas plus à une exception 
> prêt.
> La requête pour afficher la liste peut prendre plusieurs minutes !
> Le serveur n'est absolument pas surchargé de requêtes (rarement plus de un à 
> deux utilisateurs connectés à la fois) et il dispose de 2 Go de Ram (moins de 
> 600 Mo d'utilisé)...
> J'ai également vérifié l'existence des index correspondants à toutes les clés 
> étrangères.
> Est-ce que que quelqu'un aurait des pistes à fouiller afin d'optimiser les 
> temps de réponse : est-ce un problème de django, d'apache et/ou de MySQL ?

Ca peut être un souci mysql très facilement, selon la configuration du dit 
serveur. Django fait normalement le nécessaire pour l'indexation, je pense
plutôt à un souci de taille de cache côté mysql qui est peut être la 
configuration par défaut d'une ubuntu. Il doit y avoir des templates de 
configuration
dans /usr/share/mysql/

Je propose la démarche suivante:

- capturer la requête qui pose souci (django debug toolbar peut être pas mal, 
sinon mettre
le logger en DEBUG). Ou encore activer le slow-log mysql avec une valeur basse 
de temps d'exécution
des requêtes a capturer par ce mécanisme.

- vérifier le "plan d'execution" (commande explain) de la requête (utilisation 
des bons indexes)

- ensuite voir les paramètres du serveur mysql qui peuvent poser souci, si 
aucune optimisation ne
peut être faite pour l'exécution de la requête (ajout d'index étant une des 
seules possibilités 
du fait de l'ORM de django).

- donc voir pendant l'exécution de la requête ce qu'il se passe: commande "show 
processlist".
Selon le statut de la requête, notamment un "copy to tmp table", il faudra agir 
sur la configuration du
serveur mysql (sort buffer plus important si le souci vient du tri qui se fait 
sur disque au lieu de la
mémoire, augmenter les key buffer, etc).

Cordialement,

Aymeric Barantal
_______________________________________________
django mailing list
[email protected]
http://lists.afpy.org/mailman/listinfo/django

Répondre à