Re: Is it useful to record whether plans are generic or custom? - Mailing list pgsql-hackers

From Tatsuro Yamada
Subject Re: Is it useful to record whether plans are generic or custom?
Date
Msg-id c088f95c-6af1-3927-0dd0-f3a949c2f32d@nttcom.co.jp_1
Whole thread Raw
In response to Re: Is it useful to record whether plans are generic or custom?  (Kyotaro Horiguchi <horikyota.ntt@gmail.com>)
Responses Re: Is it useful to record whether plans are generic or custom?
List pgsql-hackers
Hi Torikoshi-san!

On 2020/05/21 17:10, Kyotaro Horiguchi wrote:
> At Thu, 21 May 2020 12:18:16 +0900, Fujii Masao <masao.fujii@oss.nttdata.com> wrote in
>>
>>
>> On 2020/05/20 21:56, Atsushi Torikoshi wrote:
>>> On Wed, May 20, 2020 at 1:32 PM Kyotaro Horiguchi
>>> <horikyota.ntt@gmail.com <mailto:horikyota.ntt@gmail.com>> wrote:
>>>      At Tue, 19 May 2020 22:56:17 +0900, Atsushi Torikoshi
>>>      <atorik@gmail.com <mailto:atorik@gmail.com>> wrote in
>>>       > On Sat, May 16, 2020 at 6:01 PM legrand legrand
>>>       > <legrand_legrand@hotmail.com <mailto:legrand_legrand@hotmail.com>>
>>>       > wrote:
>>>       >
>>>       > BTW, I'd also appreciate other opinions about recording the number
>>>       > of generic and custom plans on pg_stat_statemtents.
>>>      If you/we just want to know how a prepared statement is executed,
>>>      couldn't we show that information in pg_prepared_statements view?
>>>      =# select * from pg_prepared_statements;
>>>      -[ RECORD 1 ]---+----------------------------------------------------
>>>      name            | stmt1
>>>      statement       | prepare stmt1 as select * from t where b = $1;
>>>      prepare_time    | 2020-05-20 12:01:55.733469+09
>>>      parameter_types | {text}
>>>      from_sql        | t
>>>      exec_custom     | 5    <- existing num_custom_plans
>>>      exec_total          | 40   <- new member of CachedPlanSource
>>> Thanks, Horiguchi-san!
>>> Adding counters to pg_prepared_statements seems useful when we want
>>> to know the way prepared statements executed in the current session.
>>
>> I like the idea exposing more CachedPlanSource fields in
>> pg_prepared_statements. I agree it's useful, e.g., for the debug
>> purpose.
>> This is why I implemented the similar feature in my extension.
>> Please see [1] for details.
> 
> Thanks. I'm not sure plan_cache_mode should be a part of the view.
> Cost numbers would look better if it is cooked a bit.  Is it worth
> being in core?
> 
> =# select * from pg_prepared_statements;
> -[ RECORD 1 ]---+--------------------------------------------
> name            | p1
> statement       | prepare p1 as select a from t where a = $1;
> prepare_time    | 2020-05-21 15:41:50.419578+09
> parameter_types | {integer}
> from_sql        | t
> calls           | 7
> custom_calls    | 5
> plan_generation | 6
> generic_cost    | 4.3100000000000005
> custom_cost     | 9.31
> 
> Perhaps plan_generation is not needed there.

I tried to creating PoC patch too, so I share it.
Please find attached file.

# Test case
prepare count as select count(*) from pg_class where oid >$1;
execute count(1); select * from pg_prepared_statements;

-[ RECORD 1 ]---+--------------------------------------------------------------
name            | count
statement       | prepare count as select count(*) from pg_class where oid >$1;
prepare_time    | 2020-05-21 17:41:16.134362+09
parameter_types | {oid}
from_sql        | t
is_generic_plan | f     <= False

You can see the following result, when you execute it 6 times.

-[ RECORD 1 ]---+--------------------------------------------------------------
name            | count
statement       | prepare count as select count(*) from pg_class where oid >$1;
prepare_time    | 2020-05-21 17:41:16.134362+09
parameter_types | {oid}
from_sql        | t
is_generic_plan | t     <= True


Thanks,
Tatsuro Yamada

Attachment

pgsql-hackers by date:

Previous
From: Shawn Wang
Date:
Subject: Re: [bug] Table not have typarray when created by single user mode
Next
From: Rushabh Lathia
Date:
Subject: Re: some grammar refactoring