Django-fr

Forum

#1 01-12-2010 12:30:31

valentinbourgoin
Membre
Inscription : 01-12-2010
Messages : 6
Site Web

Gros problème de performance - Django-multilingual

Bonjour,

Depuis l'implémentation de django-multilingual-ng dans un projet, j'ai pu constater une forte baisse de performance. Beaucoup de requêtes SQL générées (pour accéder aux tables de traduction), et un cache qui semble ne plus être utilisé.

J'ai fait machine arrière et désactivé pour l'instant le module. Mais je constate encore un temps de réponse assez élevé. J'ai allégé les requêtes au maximum, mais je constate une différence assez énorme entre le temps d'exécution SQL et la latence observée par mon navigateur. Voici un screenshot qui l'illustre. Et voici un test de charge.

(Je précise que multilingual est bien désactivé sur ses screenshots). Cela vient-il des templates plutôt ?

Le serveur est géré par quelqu'un d'autre mais ne semble avoir aucun problème.

Merci d'avance !

Hors ligne

#2 01-12-2010 12:47:29

David Thenon
Membre
Inscription : 11-08-2010
Messages : 156
Site Web

Re : Gros problème de performance - Django-multilingual

Salut,

Ton second url est le même que le premier.

Mais sinon, est ce que tu a vérifié côté BDD si tu avais pas des très très
grosses tables et des requêtes utilisant pas ou mal les clés d'index ?

Tu n'a pas la possibilité de tester ta webapp sur un serveur de développement
sans toute les données de production ?

Hors ligne

#3 01-12-2010 14:18:49

valentinbourgoin
Membre
Inscription : 01-12-2010
Messages : 6
Site Web

Re : Gros problème de performance - Django-multilingual

Hello et merci pour ta réponse,

Oui, effectivement, la lenteur est dépendante du jeu de données. Et j'ai pas mal de jointures dans mes requêtes.

Pourtant, l'application devra être capable de gérer beaucoup plus de données. Et le nombre de requêtes n'est pas dépendant du nombre d'entrées retournées...

Hors ligne

#4 01-12-2010 14:45:19

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

Re : Gros problème de performance - Django-multilingual

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256


Le 1 déc. 2010 à 14:18, Valentin Bourgoin a écrit :

> Hello et merci pour ta réponse,
>
> Oui, effectivement, la lenteur est dépendante du jeu de données. Et j'ai
> pas mal de jointures dans mes requêtes.
>
> Pourtant, l'application devra être capable de gérer beaucoup plus de
> données. Et le nombre de requêtes n'est pas dépendant du nombre
> d'entrées retournées...

Bonjour, c'est un souci assez classique des bases de données. Les plans d'exécution des requêtes ne sont peut être plus adaptés a ta volumétrie, ainsi que le paramétrage de ta base.

Quel moteur de base de données est utilisé ?

Les statistiques sur tes objets sont elles à jour ?

Il manque certainement des indexes, ceux créés par défaut par django permettent d'assurer le minimum (surtout les contraintes d'unicité et de foreign key), mais sur certaines requêtes il peut s'avérer que certains index soient manquants pour assurer la performance. En gros toutes les colonnes qui apparaissent dans les filter de tes requêtes nécessiteraient de voir si une indexation est pertinente (le nom de valeur distinctes dans la colonne doit être suffisamment élevé).

Egalement à voir sur la taille des caches (query cache, db block cache), sur des bases de plus petite volumétrie tout doit rentrer dans les caches. S'il faut aller chercher trop souvent l'information sur le disque, c'est fort pénalisant (sauf si SSD wink).

De même quel est le comportement de ta base (ratio lecture / écriture). Plutôt des grosses requêtes d'analyse ou pleins de petites requêtes (OLTP). La configuration de la base peut être grandement différente selon les utilisations faites.

Si tu as un DBA sous la main, il faut voir avec lui, sinon tu va découvrir les joies du tuning de DB.

++ Aymeric
-----BEGIN PGP SIGNATURE-----
Version: GnuPG/MacGPG2 v2.0.12 (Darwin)

iF4EAREIAAYFAkz2UXcACgkQk+uq5YLlwVST3AD/SwgrSHLq1IKLXfBKY1JJ2IJC
+vigrkIc15kZO0lX7IMA/1tmUDDnKyMLr6pNcAUjMn4jbvSAW6RlAKI/Q6Gab3If
=9OOy
-----END PGP SIGNATURE-----

Hors ligne

#5 01-12-2010 15:42:03

valentinbourgoin
Membre
Inscription : 01-12-2010
Messages : 6
Site Web

Re : Gros problème de performance - Django-multilingual

Il s'agit d'un simple mySQL.

J'avais également créé des indexs dans mes models sur les FK et les champs auxquels les requêtes accèdent le plus souvent.

Mais pourtant, dans le la debugbar, le temps d'execution est d'environ 300ms, alors que le document met 5s à se charger. Du coup, ça ne viendrait pas des requêtes trop lentes, si ?

Hors ligne

#6 01-12-2010 15:52:02

Cyril B.
Administrateur
Inscription : 11-08-2010
Messages : 45

Re : Gros problème de performance - Django-multilingual

Salut,

Effectivement, si les requêtes SQL ne font « que » 300 ms (c'est déjà pas mal je trouve), le problème est sans doute ailleurs. Et comme tu dis que le temps d'exécution est proportionnel au jeu de données, cela pourrait peut-être venir du CPU.

Je te suggère de lancer un runserver en local et d'observer le CPU consommé par ton appli. Sinon, il reste toujours la méthode de l'instrumentation à coups de print dans le code (ce qui est assez efficace).

Hors ligne

#7 01-12-2010 19:39:55

valentinbourgoin
Membre
Inscription : 01-12-2010
Messages : 6
Site Web

Re : Gros problème de performance - Django-multilingual

Salut Cyril smile

En local, je n'ai aucun problème, le chargement est instantané.

Le débug à coup de print me semble pas mal, mais sur le serveur django tourne en wsgi. Du coup, pas de print possible. Il faut que je demande l'ouverture d'un port pour pouvoir lancer un runserver ?

Hors ligne

#8 01-12-2010 20:21:10

Cyril B.
Administrateur
Inscription : 11-08-2010
Messages : 45

Re : Gros problème de performance - Django-multilingual

Oui, tu peux nous demander une plage de ports et tester en SSH avec des prints. Quand tu mesures le temps de réponse, c'est bien celui de l'affichage de la page uniquement (i.e. le temps de réponse mis par Django pour répondre), ou de la page et ses éléments statiques (Javascript, images, CSS) ? C'est stable ou fluctuant ?

Hors ligne

#9 01-12-2010 20:51:46

valentinbourgoin
Membre
Inscription : 01-12-2010
Messages : 6
Site Web

Re : Gros problème de performance - Django-multilingual

Non non, ce n'est pas chez Alwaysdata, c'est un serveur du client (AWS). Mais c'est bon, j'ai un port ouvert, je vais pouvoir tester.

(Je vais aussi voir en mettant le site sur mon AD, pour voir si ça ne vient vraiment pas de l'installation django / config serveur)

Hors ligne

#10 01-12-2010 21:07:52

Cyril B.
Administrateur
Inscription : 11-08-2010
Messages : 45

Re : Gros problème de performance - Django-multilingual

Ah, ta demande d'ouverture de ports et l'URL de tes captures m'ont induit en erreur wink Du coup, si tu as un accès au serveur et que le problème n'est manifestement pas le CPU qui sature, tu peux utiliser la commande strace sur le processus Django. C'est assez utile pour voir rapidement s'il n'y a pas quelque chose qui bloque (lecture de fichier, requête SQL, connexion distante, etc.).

Hors ligne

#11 01-12-2010 21:33:24

valentinbourgoin
Membre
Inscription : 01-12-2010
Messages : 6
Site Web

Re : Gros problème de performance - Django-multilingual

Je viens de mettre le tout sur AD... Le chargement est ultra-rapide, avec django-multilingual. Et sans cache.

A voir donc du côté de la config serveur, mais ce n'est pas mon métier tongue

Hors ligne

Pied de page des forums