Обсуждение: PostgreSQL8.2.3 Performance

Поиск
Список
Период
Сортировка

PostgreSQL8.2.3 Performance

От
"Martial Elise KIBA"
Дата:
Hi all,


I have a database running on POstgreSQL 8.2.3. The plpgsql functions were
running well on my previous release.

When i migrated to 8.2.3, I noticed some performance degradation, specially
whith one of my function which makes an update to a table.

Here is the code of the function

CREATE OR REPLACE FUNCTION update1()
  RETURNS varchar(50)
AS
$BODY$
DECLARE
        v_cur CURSOR FOR SELECT numero, prixvente FROM produits;
        v_prixvente produitscommandes.prixvente%TYPE;
        v_produit produits.numero%TYPE;
BEGIN
        OPEN v_cur;
        LOOP
                FETCH v_cur INTO v_produit, v_prixvente;
                UPDATE produitscommandes SET prixvente=v_prixvente WHERE
produit=v_produit;
                EXIT WHEN NOT FOUND;  -- Sortie de la boucle
        END LOOP;
        CLOSE v_cur;
        RETURN 'mise à jour effectuée';
END;
$BODY$
  LANGUAGE 'plpgsql' VOLATILE;

''######################################""

produitscommandes has a primary key on commande and produit
produitscommandes has 2 indexes on commande and produit
produits has a primary key on numero

When i call the function it takes a lot (it can take 30 minutes for
approximatively 5 000 rows in produitscommandes and 3 000 in produits)

thanks all for your help.

PS: tried vaccum and analyse on table produitscommandes

Martial E. W. KIBA
Ingénieur de Conception en Informatiques
Option Génie-Logiciel
Tél: (+226) 70 15 44 93
Mail: mkiba@delgi.gov.bf / mkiba01@yahoo.fr


Re: PostgreSQL8.2.3 Performance

От
"Jonah H. Harris"
Дата:
Is there any reason you can't do something like this instead?

UPDATE produitscommandes
   SET prixvente = p.prixvente
  FROM produits p
 WHERE produit = p.numero;

On 4/27/07, Martial Elise KIBA <mkiba@delgi.gov.bf> wrote:
> Hi all,
>
>
> I have a database running on POstgreSQL 8.2.3. The plpgsql functions were
> running well on my previous release.
>
> When i migrated to 8.2.3, I noticed some performance degradation, specially
> whith one of my function which makes an update to a table.
>
> Here is the code of the function
>
> CREATE OR REPLACE FUNCTION update1()
>   RETURNS varchar(50)
> AS
> $BODY$
> DECLARE
>         v_cur CURSOR FOR SELECT numero, prixvente FROM produits;
>         v_prixvente produitscommandes.prixvente%TYPE;
>         v_produit produits.numero%TYPE;
> BEGIN
>         OPEN v_cur;
>         LOOP
>                 FETCH v_cur INTO v_produit, v_prixvente;
>                 UPDATE produitscommandes SET prixvente=v_prixvente WHERE
> produit=v_produit;
>                 EXIT WHEN NOT FOUND;  -- Sortie de la boucle
>         END LOOP;
>         CLOSE v_cur;
>         RETURN 'mise à jour effectuée';
> END;
> $BODY$
>   LANGUAGE 'plpgsql' VOLATILE;
>
> ''######################################""
>
> produitscommandes has a primary key on commande and produit
> produitscommandes has 2 indexes on commande and produit
> produits has a primary key on numero
>
> When i call the function it takes a lot (it can take 30 minutes for
> approximatively 5 000 rows in produitscommandes and 3 000 in produits)
>
> thanks all for your help.
>
> PS: tried vaccum and analyse on table produitscommandes
>
> Martial E. W. KIBA
> Ingénieur de Conception en Informatiques
> Option Génie-Logiciel
> Tél: (+226) 70 15 44 93
> Mail: mkiba@delgi.gov.bf / mkiba01@yahoo.fr
>
>
> ---------------------------(end of broadcast)---------------------------
> TIP 1: if posting/reading through Usenet, please send an appropriate
>        subscribe-nomail command to majordomo@postgresql.org so that your
>        message can get through to the mailing list cleanly
>


--
Jonah H. Harris, Software Architect | phone: 732.331.1324
EnterpriseDB Corporation            | fax: 732.331.1301
33 Wood Ave S, 3rd Floor            | jharris@enterprisedb.com
Iselin, New Jersey 08830            | http://www.enterprisedb.com/