Re: PostrgeSQL vs oracle doing 1 million sqrts am I doing it wrong?
От | Pavel Stehule |
---|---|
Тема | Re: PostrgeSQL vs oracle doing 1 million sqrts am I doing it wrong? |
Дата | |
Msg-id | CAFj8pRB20C72grQCJzz1w5+65bD+8pN-kM+qsJOHOB_XeHFB5g@mail.gmail.com обсуждение исходный текст |
Ответ на | Re: PostrgeSQL vs oracle doing 1 million sqrts am I doing it wrong? (Pavel Stehule <pavel.stehule@gmail.com>) |
Список | pgsql-hackers |
Hi
this code is +/- equal to Oracle (it should be eliminate a useless code)postgres=# DO LANGUAGE plpgsql $$ DECLARE n real;
DECLARE f integer;
BEGIN
FOR f IN 1..10000000 LOOP
--if 0=0 then
n = SQRT (f)::real;
--end if;
END LOOP;
RAISE NOTICE 'Result => %',n;
END $$;
NOTICE: Result => 3162.28
DO
Time: 5787.797 ms
2014-08-06 21:41 GMT+02:00 Pavel Stehule <pavel.stehule@gmail.com>:
PavelIt is 3x fasterLittle bit modifiedOriginal text:HiI returned to this issue and maybe I found a root issue. It is PL/pgSQL implicit IO cast
postgres=# DO LANGUAGE plpgsql $$ DECLARE n real;
DECLARE f integer;
BEGIN
FOR f IN 1..10000000 LOOPif 0=0 then
n = SQRT (f);
end if;END LOOP;Time: 31988.720 ms
RAISE NOTICE 'Result => %',n;
END $$;
NOTICE: Result => 3162.28
DO
postgres=# DO LANGUAGE plpgsql $$ DECLARE n real;if 0=0 then
DECLARE f integer;
BEGIN
FOR f IN 1..10000000 LOOP
n = SQRT (f)::real;
end if;Time: 9660.592 ms
END LOOP;
RAISE NOTICE 'Result => %',n;
END $$;
NOTICE: Result => 3162.28
DOthere is invisible IO conversion from double precision::real via libc vfprintfRegards
https://github.com/okbob/plpgsql_check/ can raise a performance warning in this situation, but we cannot do too much now without possible breaking compatibility2014-08-05 16:02 GMT+02:00 Roberto Mello <roberto.mello@gmail.com>:On Tue, Aug 5, 2014 at 9:50 AM, Kevin Grittner <kgrittn@ymail.com> wrote:Apologies. I misread on my phone and though it was within the loop.
>
> Since that is outside the loop, the difference should be nominal;<snip>
> and in a quick test it was. On the other hand, reducing the
> procedural code made a big difference.That is a big difference. Are you porting a lot of code from PL/SQL,
> test=# DO LANGUAGE plpgsql $$ DECLARE n real;
> BEGIN
> PERFORM SQRT(f) FROM generate_series(1, 10000000) x(f);
> END $$;
> DO
> Time: 3916.815 ms
and therefore evaluating the performance difference of running this
code? Or is this just a general test where you wish to assess the
performance difference?
PL/pgSQL could definitely use some loving, as far as optimization
goes, but my feeling is that it hasn't happened because there are
other suitable backends that give the necessary flexibility for the
different use cases.
Roberto
--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers
В списке pgsql-hackers по дате отправления: