calling procedures is slow and consumes extra much memory againstcalling function - Mailing list pgsql-hackers

From Pavel Stehule
Subject calling procedures is slow and consumes extra much memory againstcalling function
Date
Msg-id CAFj8pRDiiU1dqym+_P4_GuTWm76knJu7z9opWayBJTC0nQGUUA@mail.gmail.com
Whole thread Raw
Responses Re: calling procedures is slow and consumes extra much memory againstcalling function  (Pavel Stehule <pavel.stehule@gmail.com>)
Re: calling procedures is slow and consumes extra much memoryagainst calling function  (Michael Paquier <michael@paquier.xyz>)
Re: calling procedures is slow and consumes extra much memory againstcalling function  (Ranier Vilela <ranier.vf@gmail.com>)
List pgsql-hackers
Hi

I try to use procedures in Orafce package, and I did some easy performance tests. I found some hard problems:

1. test case

create or replace procedure p1(inout r int, inout v int) as $$
begin v := random() * r; end
$$ language plpgsql;

This command requires

do $$
declare r int default 100; x int;
begin
  for i in 1..300000 loop
     call p1(r, x);
  end loop;
end;
$$;

about 2.2GB RAM and 10 sec.

When I rewrite same to functions then

create or replace function p1func2(inout r int, inout v int) as $$
begin v := random() * r; end
$$ language plpgsql;

do $$
declare r int default 100; x int; re record;
begin
  for i in 1..300000 loop
     re := p1func2(r, x);
  end loop;
end;
$$;

Then execution is about 1 sec, and memory requirements are +/- zero.

Minimally it looks so CALL statements has a memory issue.

Regards

Pavel

pgsql-hackers by date:

Previous
From: Justin Pryzby
Date:
Subject: Re: PG 13 release notes, first draft (ltree dot star)
Next
From: Euler Taveira
Date:
Subject: deferred primary key and logical replication