Caro Fabiano;

  Primeiro entenda que:

a - quem escreveu os programas foi o cliente, e não eu;
b - o meu trabalho neste projeto era simplesmente orientar a equipe com relação 
à migração de uma base Oracle para PostgreSQL, portando o código de PL/SQL 
(Oracle) para PG/plSQL (PostgreSQL);
c - as partes em PL/SQL nada tem de otimizado para rodar mais rápido no Oracle.

  Isto explicado, informo que os problemas apresentados foram no quesito 
performance, sempre aliados à determinados cálculos.
  Achando que eu estava com alguma avaria no servidor do PostgreSQL (tamanha a 
diferença entre os tempos de execução entre as duas plataformas) eu escreví 
duas funções em PL/SQL (Oracle) e em PG/plSQL (Postgres), a fim de que os 
integrantes da lista me auxiliassem a resolvê-lo. O código das mesmas está 
abaixo e, como você pode verificar, é extremamente simples.
  Recebí a ajuda de muitos, mas no intuito de reescrever tudo em C, o que não 
resolve, pois tal atividade estaria fora do escopo do projeto (são milhares de 
programas).
  Um outro colega me informou que tal demora (PG/plSQL) se daria por um 
problema relacionado à compilação do código no Postgres, mas não pude me 
aprofundar no assunto para confirmar ou não. Outro me disse que o Postgres "não 
se presta para isso".
  Dito isto, faço questão de reportar que também já ouví falar desta "fonte 
confiável", como também ouví falar do "sací-pererê e da "mula sem cabeça", 
assim como o "ET de varginha". A tia de um colega meu, que está com esclerose 
múltipla, jura que viu "o demo" no quintal da casa dela. Tem um canal da TV à 
cabo que passa o "Ghost Hunters", onde alguns indivíduos supostamente detectam 
fantasmas, mas eu nunca assistí.
  Porque será que esta "fonte confiável" não nos dá uma dica do que ela fez no 
PostgreSQL? Ela não precisa publicar nada, somente nos dizer se criou tabelas, 
populou as mesmas, criou índices, rodou determinados scripts e efetuou 
determinadas queries, as configurações do banco, e só, correto?
  Mas olha, se a preocupação é um processo, então é só fazer como o TPC: 
teoricamente, lá ninguém compara nada, mas o número de transações está lá, as 
máquinas também, assim como os valores pagos e os métodos para efetuar tal 
estudo.


Atenciosamente,

Márcio de Figueiredo Moura e Castro



--------------------------------------------------
-- FIB
--------------------------------------------------

-- FIB 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;


-- FIB NO POSGRES
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' IMMUTABLE;
ALTER FUNCTION fib(integer) OWNER TO postgres;


--------------------------------------------------
-- FUNCTION1
--------------------------------------------------


-- FUNCTION1 NO ORACLE
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;


-- FUNCTION1 NO POSTGRES
CREATE OR REPLACE FUNCTION function1()
  RETURNS integer AS
$BODY$
DECLARE
  i INTEGER;
  s integer;
BEGIN
  FOR i IN 1 .. power(10, 8) LOOP
     s := s + 1;
  END LOOP;
RETURN 0;
END;
$BODY$
  LANGUAGE 'plpgsql' IMMUTABLE;
ALTER FUNCTION function1() OWNER TO postgres;







________________________________
De: Wolak Sistemas - Fabiano Machado Dias <[email protected]>
Para: Comunidade PostgreSQL Brasileira <[email protected]>
Enviadas: Sábado, 23 de Janeiro de 2010 13:20:13
Assunto: Re: [pgbr-geral] Res:  Digest pgbr-geral, volume 35, assunto 94

 Se o seu sistema já estava escrito em Oracle e você apenas migrou para
o Postgresql como você queria que tivesse o mesmo desempenho?

Você teria que rever a sua escrita porque com certeza o código que você
escreveu foi otimizado para rodar no Oracle, para fazer a migração você
deveria ter o mesmo cuidado e analisar o código que foi portado para o
Postgresql.

Também já ouvi de fonte confiável que em testes realizados comparando
os dois bandos o PG chegou a ser até 50% mais rápido que o Oracle, mas
é claro que esse teste não foi publicado e nem será.

Abraço,
Fabiano Machado Dias







Euler Taveira de Oliveira escreveu: 
MARCIO CASTRO escreveu:
>
>  Trabalho com o Postgres e com o Oracle, e relato que a diferença entre
>>os mesmos é abismal.
>>
>Discordo. Não *generalize* as coisas; já vi várias instalações PostgreSQL com
>performance superior a anterior (aka Or*cle).
>
>
>  Tentamos inclusive importar um sistema com milhares de funções e
>>procedimentos em PL/SQL (Oracle 10g) para o PL/pgSQL, mas os primeiros
>>testes nos revelaram que a performance cairia demais, tornando o projeto
>>inviável.
>>
>Você _não_ mostrou a função em PL/SQL e nem a equivalente em PL/pgSQL.
>
>
>  Na época, cheguei até a buscar auxílio na lista, escrevendo dois
>>pequenos exemplos para isto. Alguns até me auxiliaram, propondo que as
>>rotinas fossem reescritas em C, mas mesmo assim o Oracle foi mais rápido.
>>
>Oracle mais rápido? Eu *não* vi esses resultados em [1][2]. Você só mostrou os
>resultados do Oracle e _não_ do PostgreSQL com a função em C.
>
>A conclusão daquela discussão foi que você estava "batendo em espantalho"; use
>os métodos adequados para obter melhor desempenho.
>
>
>PS: http://www.tpc.org/tpcc/results/tpcc_perf_results.asp
>>Continuo torcendo para que um dia vejamos o Post nesta lista!
>>
>>    
>Para isso precisamos pagar um bom $$$ para associarmos e termos direito de
>fazer tais testes. E, é claro, termos hardwares disponíveis para realizar os
>testes. (Sem uma grande empresa com acesso aos vendedores de hardware, fica
>difícil realizarmos tal tarefa).
>
>
>[1]
>http://listas.postgresql.org.br/pipermail/pgbr-geral/2009-September/017497.html
>[2]
>http://listas.postgresql.org.br/pipermail/pgbr-geral/2009-September/017498.html
> 
>
>  



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

Responder a