Caro Euler:
Muito obrigado pelo seu esforço em me ajudar, mas entenda que me foi vendida
a idéia de que eu poderia portar todos os programas em PL/SQL para PL/pgSQL, e,
além disto não ser verdade, a performance mostrou-se muito ruim - para os
testes que eu realizei.
Ok; compilando em C fica mais rápido, mas você testou em qual máquina? Ví que
o primeiro resultado retornou em 65s, tempo semelhante ao servidor da empresa
que, se não me engano, possui 1 xeon com 4 núcleos com o Post 8.2.7, SUSE 10.3
64.
A função, no Oracle, rodou no 11g 11.1.6, também no SUSE 10.3 64, mas em um
mísero Celeron dual, e foi compilada de duas formas, obtendo o seguinte:
a - INTERPRETED: 9s
b - NATIVE : 3.5s
Diante de tamanha discrepância, concluí que estava com algum problema no
servidor do banco,
mas um colega realizou o mesmo teste no Post, obtendo tempos semelhantes.
Tentei depois com uma outra função, desta vez para calcular o fibonacci, mas
o resultado também foi bem mais favorável ao Oracle.
Esta situação "quebrou as minhas pernas" - adeus projeto integrado
Postgres/Oracle. Ou, pelo menos, por enquanto.
Mas novamente, muito obrigado.
Márcio de Figueiredo Moura e Castro
________________________________
De: Euler Taveira de Oliveira <eu...@timbira.com>
Para: Comunidade PostgreSQL Brasileira <pgbr-geral@listas.postgresql.org.br>
Enviadas: Quinta-feira, 24 de Setembro de 2009 18:12:41
Assunto: Re: [pgbr-geral] Res: Res: Memory (heap)
MARCIO CASTRO escreveu:
> Mas a pergunta que não quer calar é a seguinte: porquê é que o
> PL/pgSQL é tão mais lento do que o PL/SQL?
>
Não dá para comparar laranja com maça. Fiquei curioso em testar a sua função
mas no momento não tenho um servidor Oracle para testá-la.
O Oracle com certeza deve ter um otimização para tal laço trivial; o
PostgreSQL talvez esteja pecando nisso.
[Fazendo alguns teste de performance...]
A função function1() (versão em PL/PgSQL) e a function2() (versão em C) estão
em anexo.
Pelo que pude notar no oprofile, o problema está relacionado a alocação
excessiva de contexto quando talvez não seja necessário. Estou sem tempo para
investigar o problema agora mas eu reportei o que testei para -hackers [1].
euler=# select function1();
function1
-----------
100000000
(1 row)
Time: 62107,607 ms
euler=# select function2();
function2
-----------
100000000
(1 row)
Time: 419,673 ms
[1] http://archives.postgresql.org/pgsql-hackers/2009-09/msg01585.php
PS> não responda em outros assuntos. Isso bagunça o histórico da lista e
dificulta que estiver buscando no histórico posteriormente.
--
Euler Taveira de Oliveira
http://www.timbira.com/
____________________________________________________________________________________
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