Re: OOM on EXPLAIN with lots of nodes - Mailing list pgsql-hackers

From Heikki Linnakangas
Subject Re: OOM on EXPLAIN with lots of nodes
Date
Msg-id 54B521D6.8050600@vmware.com
Whole thread Raw
In response to OOM on EXPLAIN with lots of nodes  (Alexey Bashtanov <bashtanov@imap.cc>)
Responses Re: OOM on EXPLAIN with lots of nodes
Re: OOM on EXPLAIN with lots of nodes
List pgsql-hackers
On 01/13/2015 02:08 PM, Alexey Bashtanov wrote:
> I found that EXPLAIN command takes very much memory to execute when huge
> unions are used.
> For example the following sql
> -- begin sql
> create table t (a000 int, a001 int, ... a099 int);
> explain select * from (
>       select a001 a from t
>       union all
>       select a001 a from t
>       union all
>       ... (1000 times) ...
>       union all
>       select a001 a from t
> ) _ where a = 1;
> -- end sql
> took more than 1GB of memory to execute.
>
> Namely converting of the plan to a human-readable form causes excessive
> memory usage, not planning itself.
>
> By varying the parameters and reading source code I determined that
> memory usage linearly depends on (plan nodes count)*(overall columns
> count), thus it quadratically depends on number of tables unionized.
>
> To remove this excessive memory usage I propose
> to run deparse_context_for_planstate+deparse_expression in a separate
> memory context and free it after a plan node is generated.

Hmm, something like the attached? Seems reasonable...

- Heikki


Attachment

pgsql-hackers by date:

Previous
From: Dean Rasheed
Date:
Subject: Re: WITH CHECK and Column-Level Privileges
Next
From: Stephen Frost
Date:
Subject: Re: WITH CHECK and Column-Level Privileges