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: