Colega; obrigado pela resposta mas, como diz o título, o problema de 
performance é específico à programas em PLPGSQL, ou até o presente momento. 

A função FUNCTION1 dada como exemplo é apenas um contador para um LOOP, mas a 
diferença é gritante! Será que o PostgreSQL é lerdo assim (para este caso, com 
PLPGSQL) ou existe algum problema na minha versão (8.2.7)? Ou ainda no servidor 
onde o mesmo está instalado?


Você entendeu agora? O Oracle é o 11.1.0.6.0 instalado em uma máquina de testes 
(Intel(R) Celeron(R) CPU E1200  @ 1.60GHz - DUAL CORE). O PostgreSQL é a versão 
8.2.7, instalado em um SUSE 64 em uma máquina muito superior - não estou 
conseguindo acessar a mesma agora; fizeram uma manutenção na rede no final de 
semana e trocaram a senha, mas lhe garanto que é uma máquina bem superior, com 
quatro processadores.

Para complementar o que eu estou falando, criei a função que calcula o número 
do Fibonacci. No Oracle, levou 21,04 segundos, e no PostgreSQL, 82,53 segundos 
(select fib(35)).

Pergunto novamente aos senhores então: a diferença é esta mesmo? Alguém do 
grupo poderia compilar a função abaixo (Fibonacci) e me retornar o tempo de 
execução?

Fibonacci no POSTGRESQL
-------------------------------------------------------
CREATE OR REPLACE FUNCTION fib(fib_for integer)
  RETURNS integer AS
$BODY$
    BEGIN
        IF fib_for < 2 THEN
            RETURN fib_for;
        END IF;
        RETURN fib(fib_for - 2) + fib(fib_for - 1);
    END;
$BODY$
  LANGUAGE 'plpgsql' VOLATILE;
ALTER FUNCTION fib(fib_for integer) OWNER TO postgres;


Fibonacci no ORACLE
-------------------------------------------------------
create or replace FUNCTION fib(fib_for integer)
  RETURN integer AS
BEGIN
  IF fib_for < 2 THEN
      RETURN fib_for;
  END IF;
  RETURN fib(fib_for - 2) + fib(fib_for - 1);
END;


Atenciosamente,

Márcio de Figueiredo Moura e Castro

 





________________________________
De: Marcelo Costa <marcelojsco...@gmail.com>
Para: Comunidade PostgreSQL Brasileira <pgbr-geral@listas.postgresql.org.br>
Enviadas: Sexta-feira, 18 de Setembro de 2009 17:46:42
Assunto: Re: [pgbr-geral] Performance usando funções em PLPGSQL comparadas ao 
PL/SQL no Oracle

Olá


2009/9/18 MARCIO CASTRO <marciomouracas...@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



      
____________________________________________________________________________________
Veja quais são os assuntos do momento no Yahoo! +Buscados
http://br.maisbuscados.yahoo.com
_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a