PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 14/01/2015 12:05:39

Logiquefloue
Membre

Lenteur requêtes Postgres

Bonjour,

Je suis nouveau sur le forum et je suis débutant dans le « domaine » des bases de données.

J’ai un problème de lenteur avec mes requêtes quand j’utilise un serveur distant (serveur mutualisé ou mon pc en serveur sur un réseau).
Je souhaite connaitre l’avis des personnes plus expérimentées que moi pour être sûr que ma table et mes requêtes sont bien « faites » et optimisées…

Ma table « travaux » est constituée de 7 colonnes : id_site, date_travaux, commentaire…
Je souhaite connaitre la date_travaux la plus récente pour chaque site (sachant que un seul site peut avoir plusieurs date_travaux »
Voici ma requête que je lance depuis mon application « locale » écrite en python :

# parcourir les sites dans table « travaux »
for site in db.prepare("SELECT DISTINCT id_site FROM travaux"):
           # chercher la date la plus récente
recentT=db.prepare("SELECT MAX(date_travaux) FROM site WHERE id_site='%s' " %site[0])

Le temps d’exécution de cette requête sur une table de 450 lignes :
En Local : 1s
Serveur distant : 13s

pour info, la connexion à la base depuis l'application est très rapide, donc ce n'est pas cela la cause du ralentissement.

Merci de votre aide.

Dernière modification par Logiquefloue (14/01/2015 12:08:19)

Hors ligne

#2 14/01/2015 12:27:51

rjuju
Administrateur

Re : Lenteur requêtes Postgres

Bonjour,

Il y a fort à parier que la différence de temps est due à la latence réseau. Plutôt que de programmer la logique en python, vous devriez le faire en SQL. La requête suivante vous donnera le bon résultat directement :


SELECT id_site,max(date_travaux) FROM travaux GROUP BY id_site ORDER BY id_site;

Hors ligne

#3 14/01/2015 12:52:23

Logiquefloue
Membre

Re : Lenteur requêtes Postgres

Merci de votre réponse.
Pour mieux comprendre :
Je viens de faire un test de lancer la requête sql vous avez indiqué avec pgadmin sur le serveur distant, le temps d’exécution est 25ms ! Cela n’écarte pas la latence réseau ?
Quel est la différence entre programmer la logique en python (ou autre) et le faire en sql ?

Hors ligne

#4 14/01/2015 13:06:28

rjuju
Administrateur

Re : Lenteur requêtes Postgres

Il me semble que pgAdmin prend en compte les temps réseaux pour l'exécution d'une requête.

Programmer la logique en SQL est bien plus efficace, car le moteur est justement optimisé pour gérer des ensembles. Dans votre premier exemple, vous exécutez une requête qui vous renvoie 450 lignes, puis vous effectuez une requête pour chacune des lignes. Cela fait donc 451 requêtes au lieu d'une seule. Dans votre cas, les 12secondes supplémentaires pour une exécution distante ramenées aux 450 exécutions représentent 26 ms par requête, ce qui peut tout à fait correspondre à une latence réseau.

Hors ligne

#5 14/01/2015 13:18:01

Logiquefloue
Membre

Re : Lenteur requêtes Postgres

Très bien c’est très clair. Cela veut dire que ma base peut être installée sur un serveur distant sans connaitre de véritable ralentissement à condition de programmer la logique en SQL ! Ouf, je suis rassuré !
Merci infiniment,

Hors ligne

#6 22/01/2015 11:49:09

SQLpro
Membre

Re : Lenteur requêtes Postgres

Effectivement ce sont les "round trips" c'est à dire les aller et retour entre serveur et client, autrement dit les temps réseau, qui bouffent (à vue de nez) 99,9% de votre temps de traitement...


Ceci n'est pas nouveau et c'est généralement lié au style de développement. Plus vous mettrez de code ensembliste côté serveur SGBDR plus les performances seront importante...


À me lire : http://img1.lemondeinformatique.fr/fich … aisses.pdf



A +


Frédéric Brouard, alias SQLpro,  ARCHITECTE DE DONNÉES,  Expert langage SQL
Le site sur les SGBD relationnel et langage SQL   : http://sqlpro.developpez.com/
Modélisation de données, conseil, expertise, audit, optimisation, tuning, formation
* * * * *  Enseignant CNAM PACA, ISEN Toulon,  CESI Aix en Provence  * * * * *

Hors ligne

Pied de page des forums