[pgbr-geral] Performance usando funções em PLPGSQL comparadas ao PL/SQL no Oracle

Marcelo Costa marcelojscosta em gmail.com
Sexta Setembro 18 17:46:42 BRT 2009


Olá

2009/9/18 MARCIO CASTRO <marciomouracastro em yahoo.com.br>

> Caros colegas:
>
>   Estou portando uma aplicação do Oracle 10g para o PostgreSQL 8.2.7, mas
> estou encontrando alguns problemas relacionados à performance. Para
> exemplificar, criei o seguinte:
>
>
> PLPGSQL:
> --------------------------------------
> CREATE OR REPLACE FUNCTION function1()
>   RETURNS numeric AS
> $BODY$
> DECLARE
>   i INTEGER;
>   s integer;
>   v_tempo numeric;
> BEGIN
>   SELECT (EXTRACT(minute FROM current_timestamp) * 60) + EXTRACT(second
> FROM current_timestamp) into v_tempo;
>   FOR i IN 1 .. power(10, 8) LOOP
>      s := s + 1;
>   END LOOP;
>   SELECT ((EXTRACT(minute FROM current_timestamp) * 60) + EXTRACT(second
> FROM current_timestamp)) - v_tempo into v_tempo;
>   RETURN v_tempo;
> END;
> $BODY$
>   LANGUAGE 'plpgsql' VOLATILE;
>
>
> PLPGSQL:
> --------------------------------------
> create or replace FUNCTION FUNCTION1 return number AS
>   i INTEGER;
>   s integer;
>   v_tempo number;
> BEGIN
>   SELECT (EXTRACT(minute FROM current_timestamp) * 60) + EXTRACT(second
> FROM current_timestamp) into v_tempo FROM dual;
>   FOR i IN 1 .. power(10,8) LOOP
>      s := s + 1;
>   END LOOP;
>   SELECT ((EXTRACT(minute FROM current_timestamp) * 60) + EXTRACT(second
> FROM current_timestamp)) - v_tempo into v_tempo FROM dual;
>   RETURN v_tempo;
> END FUNCTION1;
>
>
>   No Oracle, a mesma leva 3.5 s, e no Post, mais de 60s!
>   O que é que eu estou fazendo de errado? O PostgreSQL/PLPGSQL é realmente
> mais lento do que o PL/SQL do Oracle?
>
>
Para te ajudarmos você precisa descrever algumas coisas.

1. Qual teu cenário para cada produto ? são idênticos (memoria, arranjo dos
discos, processador, etc...) ?

Eu migrei um oracle 10g com tabelas monstruosas (mais de 130 milhões de
registros) para PostgreSQL e atualmente uso a versão 8.3.8 (migrei ontem
para essa versão pois antes usava a 8.3.7).

Uma boa remodelagem das tabelas, técnicas de particionamento de tabelas,
índices criados de forma correta implicam muito no tempo de resposta.

Meu banco funciona que é um avião e o hardware do Oracle e do PostgreSQL são
idênticos.

Particularmente os desenvolvedores consideram que os tempos de resposta do
banco PostgreSQL ficaram superiores apesar da remodelagem que foi realizada.
Isso não é um comparativo apenas estou frisando que a performance não caiu.
Pode e deve ser pelo motivo de o banco Oracle precisar de uns tapas(diga-se
refatorada) para ficar bom também.

-- 
Marcelo Costa
www.marcelocosta.net
-------------------------------------------------
“You can't always get what want”,

Doctor House in apology to Mike Jagger
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: http://listas.postgresql.org.br/pipermail/pgbr-geral/attachments/20090918/cd317609/attachment.htm 


More information about the pgbr-geral mailing list