Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#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
Pages : 1