Re: OOM on EXPLAIN with lots of nodes

Поиск
Список
Период
Сортировка
От Heikki Linnakangas
Тема Re: OOM on EXPLAIN with lots of nodes
Дата
Msg-id 54B521D6.8050600@vmware.com
обсуждение исходный текст
Ответ на OOM on EXPLAIN with lots of nodes  (Alexey Bashtanov <bashtanov@imap.cc>)
Ответы Re: OOM on EXPLAIN with lots of nodes  (Alexey Bashtanov <bashtanov@imap.cc>)
Re: OOM on EXPLAIN with lots of nodes  (Tom Lane <tgl@sss.pgh.pa.us>)
Список 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


Вложения

В списке pgsql-hackers по дате отправления:

Предыдущее
От: Dean Rasheed
Дата:
Сообщение: Re: WITH CHECK and Column-Level Privileges
Следующее
От: Stephen Frost
Дата:
Сообщение: Re: WITH CHECK and Column-Level Privileges