Re: calling procedures is slow and consumes extra much memoryagainst calling function - Mailing list pgsql-hackers

From Michael Paquier
Subject Re: calling procedures is slow and consumes extra much memoryagainst calling function
Date
Msg-id 20200511060734.GA88791@paquier.xyz
Whole thread Raw
In response to calling procedures is slow and consumes extra much memory againstcalling function  (Pavel Stehule <pavel.stehule@gmail.com>)
List pgsql-hackers
On Sun, May 10, 2020 at 10:20:53PM +0200, Pavel Stehule wrote:
> 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;
>
> Then execution is about 1 sec, and memory requirements are +/- zero.
>
> Minimally it looks so CALL statements has a memory issue.

Behavior not limited to plpgsql.  A plain SQL function shows the same
leak patterns:
create or replace procedure p1_sql(in r int, in v int)
  as $$ SELECT r + v; $$ language sql;
  And I cannot get valgrind to complain about lost references, so this
  looks like some missing memory context handling.

Also, I actually don't quite get why the context created by
CreateExprContext() cannot be freed before the procedure returns.  A
short test shows no problems in calling FreeExprContext() at the end
of ExecuteCallStmt(), but that does not address everything.  Perhaps a
lack of tests with pass-by-reference expressions and procedures?

Peter?
--
Michael


Attachment

pgsql-hackers by date:

Previous
From: Pavel Stehule
Date:
Subject: Re: calling procedures is slow and consumes extra much memory againstcalling function
Next
From: Pavel Stehule
Date:
Subject: Re: calling procedures is slow and consumes extra much memory againstcalling function