Django-fr

Forum

  • Accueil
  • » Django-fr
  • » Re: [afpy/django] Optimisation MySQL : pb. de requ êtes très lentes...

#1 03-02-2012 14:26:11

Chamal
Membre
Inscription : 11-08-2010
Messages : 17

Re: [afpy/django] Optimisation MySQL : pb. de requ êtes très lentes...

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

Hors ligne

  • Accueil
  • » Django-fr
  • » Re: [afpy/django] Optimisation MySQL : pb. de requ êtes très lentes...

Pied de page des forums