Re: UPDATE de plus en plus long

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
>

In response to

Browse pgsql-fr-generale by date

  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