út 18. 2. 2020 v 17:08 odesílatel Amit Langote <amitlangot...@gmail.com>
napsal:

> On Tue, Feb 18, 2020 at 6:56 PM Amit Langote <amitlangot...@gmail.com>
> wrote:
> > On Tue, Feb 18, 2020 at 2:56 PM Pavel Stehule <pavel.steh...@gmail.com>
> wrote:
> > > út 18. 2. 2020 v 6:03 odesílatel Amit Langote <amitlangot...@gmail.com>
> napsal:
> > >> I didn't send the patch, because it didn't handle the cases where a
> > >> simple expression consists of an inline-able function(s) in it, which
> > >> are better handled by a full-fledged planner call backed up by the
> > >> plan cache.  If we don't do that then every evaluation of such
> > >> "simple" expression needs to invoke the planner.  For example:
> > >>
> > >> Consider this inline-able SQL function:
> > >>
> > >> create or replace function sql_incr(a bigint)
> > >> returns int
> > >> immutable language sql as $$
> > >> select a+1;
> > >> $$;
> > >>
> > >> Then this revised body of your function foo():
> > >>
> > >> CREATE OR REPLACE FUNCTION public.foo()
> > >>  RETURNS int
> > >>  LANGUAGE plpgsql
> > >>  IMMUTABLE
> > >> AS $function$
> > >> declare i bigint = 0;
> > >> begin
> > >>   while i < 1000000
> > >>   loop
> > >>     i := sql_incr(i);
> > >>   end loop; return i;
> > >> end;
> > >> $function$
> > >> ;
> > >>
> > >> With HEAD `select foo()` finishes in 786 ms, whereas with the patch,
> > >> it takes 5102 ms.
> > >>
> > >> I think the patch might be good idea to reduce the time to compute
> > >> simple expressions in plpgsql, if we can address the above issue.
> > >
> > >
> > > Your patch is very interesting - minimally it returns performance
> before 8.2. The mentioned issue can be fixed if we disallow SQL functions
> in this fast execution.
> >
> > I updated the patch to do that.
> >
> > With the new patch, `select foo()`, with inline-able sql_incr() in it,
> > runs in 679 ms.
> >
> > Without any inline-able function, it runs in 330 ms, whereas with
> > HEAD, it takes 590 ms.
>
> I polished it a bit.
>

the performance looks very interesting - on my comp the execution time of
100000000 iterations was decreased from 34 sec to 15 sec,

So it is interesting speedup

Pavel



> Thanks,
> Amit
>

Reply via email to