From: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
---|---|
To: | pgsql-committers(at)lists(dot)postgresql(dot)org |
Subject: | pgsql: Make functions.c mostly run in a short-lived memory context. |
Date: | 2025-04-17 16:57:47 |
Message-ID: | E1u5SYd-000Vjp-1d@gemulon.postgresql.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-committers |
Make functions.c mostly run in a short-lived memory context.
Previously, much of this code ran with CurrentMemoryContext set
to be the function's fcontext, so that we tended to leak a lot of
stuff there. Commit 0dca5d68d dealt with that by releasing the
fcontext at the completion of each SQL function call, but we'd
like to go back to the previous approach of allowing the fcontext
to be query-lifespan. To control the leakage problem, rearrange
the code so that we mostly run in the memory context that fmgr_sql
is called in (which we expect to be short-lived). Notably, this
means that parsing/planning is all done in the short-lived context
and doesn't leak cruft into fcontext.
This patch also fixes the allocation of execution_state records
so that we don't leak them across executions. I set that up
with a re-usable array that contains at least as many
execution_state structs as we need for the current querytree.
The chain structure is still there, but it's not really doing
much for us, and maybe somebody will be motivated to get rid
of it. I'm not though.
This incidentally also moves the call of BlessTupleDesc to be
with the code that creates the JunkFilter. That doesn't make
much difference now, but a later patch will reduce the number
of times the JunkFilter gets made, and we needn't bless the
results any more often than that.
We still leak a fair amount in fcontext, particularly when
executing utility statements, but that's material for a
separate patch step; the point here is only to get rid of
unintentional allocations in fcontext.
Branch
------
master
Details
-------
https://git.postgresql.org/pg/commitdiff/595d1efeda11186ac6850f5e0bfec877da363e1e
Modified Files
--------------
src/backend/executor/functions.c | 153 ++++++++++++++++++++++++---------------
1 file changed, 95 insertions(+), 58 deletions(-)
From | Date | Subject | |
---|---|---|---|
Next Message | Tom Lane | 2025-04-17 17:02:05 | Re: pgsql: Make SQLFunctionCache long-lived again. |
Previous Message | Robert Haas | 2025-04-17 14:42:45 | Re: pgsql: Add function to get memory context stats for processes |