From: | Paul Poirel <poirelpa(at)gmail(dot)com> |
---|---|
To: | Dimitri Fontaine <dimitri(at)2ndquadrant(dot)fr> |
Cc: | Pgsql Fr Generale <pgsql-fr-generale(at)postgresql(dot)org> |
Subject: | Re: UPDATE de plus en plus long |
Date: | 2013-11-20 11:27:59 |
Message-ID: | CAK9eNFyodOXxPrTmGt1vGCCuC=xS-GF2AYwxhfRQO8VfFfVMXg@mail.gmail.com |
Views: | Whole Thread | Raw Message | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-fr-generale |
Bonjour,
Finalement, j'ai découpé le traitement en lots. Chaque lot est traité dans
une fonction appelée via dblink, ce qui permet de finir la transaction et
de laisser autovacuum agir.
Le temps de traitement est maintenant constant, et acceptable.
Merci beaucoup pour votre aide, j'ai beaucoup appris grâce à vous et aux
solutions que vous m'avez proposées.
Paul
Le 19 novembre 2013 15:10, Dimitri Fontaine <dimitri(at)2ndquadrant(dot)fr> a
écrit :
> Paul Poirel <poirelpa(at)gmail(dot)com> writes:
> > En pratique, on a une ligne par année dans cette table.
> > On stocke donc l'année (clé primaire) et un compteur. A chaque itération,
> > ce compteur est incrémenté.
> > Ce comportement pourrait être remplacé par plusieurs séquences (une par
> > année).
> >
> > On a donc des dizaines de millier d'updates sur la même ligne, appelés
> par
> > une même fonction (et donc dans une seule transaction).
> > Je vais voir avec le client (qui a conçu l'appli) si il est possible de
> > faire autrement.
>
> Créer une table TEMPORAIRE, et faire un INSERT par traitement. En fin de
> traitement faire un UPDATE de la table cible en prenant la somme les
> insert qui ont été réalisés :
>
> create temp table une_ligne_par_traitement(annee date) on commit drop;
> …
> insert into une_ligne_par_an(annee_du_traitement_en_cours);
> …
> update cible c
> set compteur = c.compteur + t.somme
> from (
> select annee, count(*) as somme
> from une_ligne_par_traitement
> group by annee
> )
> as t
> where t.annee = c.annee;
>
> Le mieux serait bien évidemment de faire ce genre d'UPDATE directement
> avec les données à traiter, plutôt que de maintenir les données à
> l'unité.
>
> --
> Dimitri Fontaine
> http://2ndQuadrant.fr PostgreSQL : Expertise, Formation et Support
>
From | Date | Subject | |
---|---|---|---|
Next Message | Marie-Claude QUIDOZ | 2013-11-20 16:50:04 | foreign table |
Previous Message | Dimitri Fontaine | 2013-11-19 14:10:36 | Re: UPDATE de plus en plus long |