From: | Tatsuro Yamada <tatsuro(dot)yamada(dot)tf(at)nttcom(dot)co(dot)jp> |
---|---|
To: | Kyotaro Horiguchi <horikyota(dot)ntt(at)gmail(dot)com>, masao(dot)fujii(at)oss(dot)nttdata(dot)com, atorik(at)gmail(dot)com |
Cc: | legrand_legrand(at)hotmail(dot)com, pgsql-hackers(at)postgresql(dot)org |
Subject: | Re: Is it useful to record whether plans are generic or custom? |
Date: | 2020-05-21 08:43:01 |
Message-ID: | c088f95c-6af1-3927-0dd0-f3a949c2f32d@nttcom.co.jp_1 |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | 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(dot)fujii(at)oss(dot)nttdata(dot)com> wrote in
>>
>>
>> On 2020/05/20 21:56, Atsushi Torikoshi wrote:
>>> On Wed, May 20, 2020 at 1:32 PM Kyotaro Horiguchi
>>> <horikyota(dot)ntt(at)gmail(dot)com <mailto:horikyota(dot)ntt(at)gmail(dot)com>> wrote:
>>> At Tue, 19 May 2020 22:56:17 +0900, Atsushi Torikoshi
>>> <atorik(at)gmail(dot)com <mailto:atorik(at)gmail(dot)com>> wrote in
>>> > On Sat, May 16, 2020 at 6:01 PM legrand legrand
>>> > <legrand_legrand(at)hotmail(dot)com <mailto:legrand_legrand(at)hotmail(dot)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 | Content-Type | Size |
---|---|---|
poc_pg_prepared_statements.patch | text/plain | 2.6 KB |
From | Date | Subject | |
---|---|---|---|
Next Message | Rushabh Lathia | 2020-05-21 08:49:55 | Re: some grammar refactoring |
Previous Message | Shawn Wang | 2020-05-21 08:10:12 | Re: [bug] Table not have typarray when created by single user mode |