Re: BUG #14843: CREATE TABLE churns through all memory, crashes db

From: Andres Freund <andres(at)anarazel(dot)de>
To: Michael Paquier <michael(dot)paquier(at)gmail(dot)com>
Cc: ropeladder(at)gmail(dot)com, PostgreSQL mailing lists <pgsql-bugs(at)postgresql(dot)org>, Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
Subject: Re: BUG #14843: CREATE TABLE churns through all memory, crashes db
Date: 2017-10-06 18:01:43
Message-ID: 20171006180143.rq3idmtijbeahjyj@alap3.anarazel.de
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs

On 2017-10-06 12:57:59 +0900, Michael Paquier wrote:
> On Fri, Oct 6, 2017 at 10:00 AM, Michael Paquier
> <michael(dot)paquier(at)gmail(dot)com> wrote:
> > This is suspicious:
> > ExecutorState: 62906368 total in 17 blocks; 13736 free (35
> > chunks); 62892632 used
>
> The introduction of the ProjectSet node has caused the regressionin
> the executor visibly. A bisect run is showing me this commit as the
> culprit
> commit 69f4b9c85f168ae006929eec44fc44d569e846b9
> Author: Andres Freund <andres(at)anarazel(dot)de>
> Date: Wed Jan 18 12:46:50 2017 -0800
> Move targetlist SRF handling from expression evaluation to new executor node.
>
> I was expecting a leak of some kind first, but valgrind does not
> complain when executing the query eating all the memory. Before this
> commit the memory usage remains low and stable, less than 1% in my
> environments.

It's "just" a MemoryContextSwitchTo() that some idiot^WI forgot and
reviews didn't spot. The ResetExprContext() in ExecProjectSet() is
correctly placed afaict, it's just that we leak (query scope) a lot into
the surrounding memory context. A MemoryContextSwitchTo() at the top &
bottom of ExecProjectSet() fixes the issue for me.

Greetings,

Andres Freund

In response to

Responses

Browse pgsql-bugs by date

  From Date Subject
Next Message Tom Lane 2017-10-06 18:18:57 Re: BUG #14843: CREATE TABLE churns through all memory, crashes db
Previous Message Tom Lane 2017-10-06 17:01:26 Re: BUG #14845: postgres_fdw and mysql_fdw can cause crash of instance