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 18/09/2019 14:25:57

sihem_info
Membre

lenteur request postgres

Bonjour à tous,

Voila j'ai une table dans ma base Postgres qui contient plus de 6 millions de lignes.
Mais une simple requête update par exemple prend plus de 30 min.
Exemple

	Sélectionner tout - Visualiser dans une fenêtre à part
update reprise_journal r set id_agen = a.id from agen a WHERE r.code = a.code and statut in ('A' , 'B');

met 32 min

 :    Sélectionner tout - Visualiser dans une fenêtre à part
select * from reprise_journal  where  statut in ('A' , 'B');

met 1 min 50 secs

J'ai meme créé des Indes dans les deux table:
idx_reprise_journal_code
idx_reprise_journal_statut
idx_agen_code

J'aimerai vraiment avoir un tuyau pour l'optimisation d'une table postgres avec des millions de données.

Je vous remercie d'avance

Hors ligne

#2 18/09/2019 16:21:24

gleu
Administrateur

Re : lenteur request postgres

Il manque énormément d'infos. Déjà, quand on veut accélérer une requête, il est essentiel de fournir le plan d'exécution complet (donc un EXPLAIN (ANALYZE, BUFFERS de préférence avec un track_io_timing à on. La version de PostgreSQL peut tout changer, donc indiquer la version devrait aussi être un réflexe. Indiquer le nom des index ne nous indique pas leur définition, donc fournissez plutôt la définition des index. Enfin, dernier point spécifique à l'update, la requête telle qu'elle est écrite peut modifier des lignes où rien ne sera réellement modifié. Ce que je veux dire, c'est que sur cette requête, PostgreSQL va modifier chaque ligne de reprise_journal pour laquelle "r.code = a.code and statut in ('A' , 'B')", que id_agen soit différent de a.id ou pas. Ça peut ne rien changer comme ça peut tout changer. Il est fortement conseillé de transformer ça en "r.code = a.code and statut in ('A' , 'B') and id_agen <> a.id".


Guillaume.

Hors ligne

Pied de page des forums