čt 27. 2. 2025 v 13:25 odesílatel Alexander Pyhalov < a.pyha...@postgrespro.ru> napsal:
> Pavel Stehule писал(а) 2025-02-26 22:34: > > hI > > > > I can confirm 60% speedup for execution of function fx and fx3 - both > > functions are very primitive, so for real code the benefit can be > > higher > > > > Unfortunately, there is about 5% slowdown for inlined code, and for > > just plpgsql code too. > > > > I tested fx4 > > > > create or replace function fx4(int) returns int immutable as $$ begin > > return $1 + $1; end $$ language plpgsql; > > > > and fx2 > > > > create or replace function fx2(int) returns int as $$ select 2 * $1; > > $$ > > language sql immutable; > > > > and execution of patched code is about 5% slower. It is strange so > > this patch has a negative impact on plpgsql execution. > > > > Regards > > > > Pavel > > Hi. I've tried to reproduce slowdown and couldn't. > > create or replace function fx4(int) returns int immutable as $$ begin > return $1 + $1; end $$ language plpgsql; > > do $$ > begin > for i in 1..5000000 loop > perform fx4((random()*100)::int); -- or fx2 > end loop; > end; > $$; > > OLD results: > Time: 8268.614 ms (00:08.269) > Time: 8178.836 ms (00:08.179) > Time: 8306.694 ms (00:08.307) > > New (patched) results: > Time: 7743.945 ms (00:07.744) > Time: 7803.109 ms (00:07.803) > Time: 7736.735 ms (00:07.737) > > Not sure why new is faster (perhaps, some noise?) - looking at perf > flamegraphs I don't see something evident. > > create or replace function fx2(int) returns int as $$ select 2 * $1; $$ > language sql immutable; > do $$ > begin > for i in 1..5000000 loop > perform fx2((random()*100)::int); -- or fx2 > end loop; > end; > $$; > > OLD results: > Time: 5346.471 ms (00:05.346) > Time: 5359.222 ms (00:05.359) > Time: 5316.747 ms (00:05.317) > > New (patched) results: > Time: 5188.363 ms (00:05.188) > Time: 5225.322 ms (00:05.225) > Time: 5203.667 ms (00:05.204) > I'll try to get profiles. Regards Pavel > > -- > Best regards, > Alexander Pyhalov, > Postgres Professional >