From: | Daniel Migowski <dmigowski(at)ikoffice(dot)de> |
---|---|
To: | Konstantin Knizhnik <k(dot)knizhnik(at)postgrespro(dot)ru>, <pgsql-hackers(at)lists(dot)postgresql(dot)org> |
Subject: | Re: [HACKERS] Cached plans and statement generalization |
Date: | 2019-08-02 09:01:47 |
Message-ID: | b68e36eb-a0ea-3b28-62c4-a72f06fe4dfb@ikoffice.de |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
Am 02.08.2019 um 10:57 schrieb Konstantin Knizhnik:
> On 02.08.2019 11:25, Daniel Migowski wrote:
>>
>> I have two suggestions however:
>>
>> 1. Please allow to gather information about the autoprepared
>> statements by returning them in pg_prepared_statements view. I would
>> love to monitor usage of them as well as the memory consumption that
>> occurs. I suggested a patch to display that in
>> https://www.postgresql.org/message-id/41ED3F5450C90F4D8381BC4D8DF6BBDCF02E10B4@EXCHANGESERVER.ikoffice.de
>>
>>
> Sorry, but there is pg_autoprepared_statements view. I think that it
> will be better to distinguish explicitly and implicitly prepared
> statements, will not it?
> Do you want to add more information to this view? Right now it shows
> query string, types of parameters and number of this query execution.
My sorry, I didn't notice it in the patch. If there is another view for
those that's perfectly fine.
>> 2. Please not only use a LRU list, but maybe something which would
>> prefer statements that get reused at all. We often create ad hoc
>> statements with parameters which don't really need to be kept. Maybe
>> I can suggest an implementation of an LRU list where a reusal of a
>> statement not only pulls it to the top of the list but also increases
>> a reuse counter. When then a statement would drop off the end of the
>> list one checks if the reusal count is non-zero, and only really
>> drops it if the resual count is zero. Else the reusal count is
>> decremented (or halved) and the element is also placed at the start
>> of the LRU list, so it is kept a bit longer.
>>
> There are many variations of LRU and alternatives: clock, segmented
> LRU, ...
> I agree that classical LRU may be not the best replacement policy for
> autoprepare.
> Application is either use static queries, either constructing them
> dynamically. It will be better to distinguish queries executed at
> least twice from one-shot queries.
> So may be SLRU will be the best choice. But actually situation you
> have described (We often create ad hoc statements with parameters
> which don't really need to be kept)
> is not applicable to atutoprepare. Autoprepare deals only with
> statements which are actually executed.
>
> We have another patch which limits number of stored prepared plans to
> avoid memory overflow (in case of using stored procedures which
> implicitly prepare all issued queries).
> Here choice of replacement policy is more critical.
Alright, just wanted to have something better than a LRU, so it is not a
stepback from the implementation in the JDBC driver for us.
Kind regards,
Daniel Migowski
From | Date | Subject | |
---|---|---|---|
Next Message | Thomas Munro | 2019-08-02 09:32:43 | A couple of random BF failures in kerberosCheck |
Previous Message | Konstantin Knizhnik | 2019-08-02 08:57:31 | Re: [HACKERS] Cached plans and statement generalization |