Re: cached plans and enable_partition_pruning

Поиск
Список
Период
Сортировка
От Andres Freund
Тема Re: cached plans and enable_partition_pruning
Дата
Msg-id 20180723142035.hwaqctw4fbpyz3y4@alap3.anarazel.de
обсуждение исходный текст
Ответ на cached plans and enable_partition_pruning  (Amit Langote <Langote_Amit_f8@lab.ntt.co.jp>)
Ответы Re: cached plans and enable_partition_pruning
Список pgsql-hackers
Hi,

On 2018-07-23 18:31:43 +0900, Amit Langote wrote:
> It seems that because enable_partition_pruning's value is only checked
> during planning, turning it off *after* a plan is created and cached does
> not work as expected.
> 
> create table p (a int) partition by list (a);
> create table p1 partition of p for values in (1);
> create table p1 partition of p for values in (2);
> 
> -- force a generic plan so that run-time pruning is used in the plan
> reset enable_partition_pruning;
> set plan_cache_mode to force_generic_plan;
> prepare p as select * from p where a = $1;
> 
> explain (costs off, analyze) execute p (1);
>                            QUERY PLAN
> ────────────────────────────────────────────────────────────────
>  Append (actual time=0.079..0.106 rows=1 loops=1)
>    Subplans Removed: 1
>    ->  Seq Scan on p2 (actual time=0.058..0.068 rows=1 loops=1)
>          Filter: (a = $1)
>  Planning Time: 17.573 ms
>  Execution Time: 0.396 ms
> (6 rows)
> 
> set enable_partition_pruning to off;
> 
> explain (costs off, analyze) execute p (1);
>                            QUERY PLAN
> ────────────────────────────────────────────────────────────────
>  Append (actual time=0.108..0.135 rows=1 loops=1)
>    Subplans Removed: 1
>    ->  Seq Scan on p2 (actual time=0.017..0.028 rows=1 loops=1)
>          Filter: (a = $1)
>  Planning Time: 0.042 ms
>  Execution Time: 0.399 ms
> (6 rows)
> 
> Pruning still occurs, whereas one would expect it not to, because the plan
> (the Append node) contains run-time pruning information, which was
> initialized because enable_partition_pruning was turned on when the plan
> was created.
> 
> Should we check its value during execution too, as done in the attached?

I think it's correct to check the plan time value, rather than the
execution time value. Other enable_* GUCs also take effect there, and I
don't see a problem with that?

Greetings,

Andres Freund


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

Предыдущее
От: Andres Freund
Дата:
Сообщение: Re: [HACKERS] logical decoding of two-phase transactions
Следующее
От: Alexander Korotkov
Дата:
Сообщение: Re: [HACKERS] Bug in to_timestamp().