Thread: raised checkpoint limit & manual checkpoint

raised checkpoint limit & manual checkpoint

From
Fabien COELHO
Date:
Hello,

The checkpoint time limit has just been raised to one day after a 
discussion started by Andres Freund:

https://www.postgresql.org/message-id/20160202001320.GP8743%40awork2.anarazel.de

I would have gone further up, say one week or even one month, but I think 
that this new limit is an improvement over the previous 1 hour maximum.

Now ISTM that there is a possible use case which arises with this new 
setting and is not well addressed by postgresql:

Let us say that an application has periods of high and low usage, say over 
a day, so that I want to avoid a checkpoint from 8 to 20, but I'm okay 
after that. I could raise the size and time limits so that they do not 
occur during these hours and plan to do a manual CHECKPOINT once a day 
when I see fit.

Now the problem I see is that CHECKPOINT means "do a CHECKPOINT right now 
as fast as possible", i.e. there is no throttling whatsoever, which leads 
to heavy IO and may result in a very unresponsive database.

I would suggest that a good complementary feature would be to allow a 
manual checkpoint to run over a period of time, say something like:
  CHECKPOINT OVER '10 hours';

That would target to complete after this period (whether it succeeds or 
not is another issue) instead of going as fast as possible, thus avoiding
some performance degradation.

Any thoughts?

-- 
Fabien.



Re: raised checkpoint limit & manual checkpoint

From
Amit Kapila
Date:
On Sat, Sep 24, 2016 at 12:12 PM, Fabien COELHO <coelho@cri.ensmp.fr> wrote:
>
> Hello,
>
> The checkpoint time limit has just been raised to one day after a discussion
> started by Andres Freund:
>
> https://www.postgresql.org/message-id/20160202001320.GP8743%40awork2.anarazel.de
>
> I would have gone further up, say one week or even one month, but I think
> that this new limit is an improvement over the previous 1 hour maximum.
>
> Now ISTM that there is a possible use case which arises with this new
> setting and is not well addressed by postgresql:
>
> Let us say that an application has periods of high and low usage, say over a
> day, so that I want to avoid a checkpoint from 8 to 20, but I'm okay after
> that. I could raise the size and time limits so that they do not occur
> during these hours and plan to do a manual CHECKPOINT once a day when I see
> fit.
>
> Now the problem I see is that CHECKPOINT means "do a CHECKPOINT right now as
> fast as possible", i.e. there is no throttling whatsoever, which leads to
> heavy IO and may result in a very unresponsive database.
>
> I would suggest that a good complementary feature would be to allow a manual
> checkpoint to run over a period of time, say something like:
>
>   CHECKPOINT OVER '10 hours';
>
> That would target to complete after this period (whether it succeeds or not
> is another issue) instead of going as fast as possible, thus avoiding
> some performance degradation.
>

Isn't it somewhat overlaps with existing parameter
checkpoint_completion_target?  You can use
checkpoint_completion_target to throttle the checkpoints.  The option
you are suggesting seems to be more straight forward, but how will
user decide the time he wants Checkpoint to take.

-- 
With Regards,
Amit Kapila.
EnterpriseDB: http://www.enterprisedb.com



Re: raised checkpoint limit & manual checkpoint

From
Fabien COELHO
Date:
>> I would suggest that a good complementary feature would be to allow a manual
>> checkpoint to run over a period of time, say something like:
>>
>>   CHECKPOINT OVER '10 hours';
>>
>> That would target to complete after this period (whether it succeeds or not
>> is another issue) instead of going as fast as possible, thus avoiding
>> some performance degradation.
>
> Isn't it somewhat overlaps with existing parameter
> checkpoint_completion_target?

More or less. The difference is that throttled checkpoints are currently 
started *automatically* when an certain amount of work has been done or 
some time as passed, but you cannot start them manually.

> You can use checkpoint_completion_target to throttle the checkpoints.

Nearly yes, however it does not give any control to when a throttle 
checkpoint is started. I'm arguing that since the configuration allows to 
delay checkpointing up to a day, than the ability to control when to 
actually start one seems to make sense.

> The option you are suggesting seems to be more straight forward, but how 
> will user decide the time he wants Checkpoint to take.

In the hypothetical use case I have in mind, the user would happen to know 
its load well enough to choose. Say the system supports a load linked to 
office hour, you would know that you want it done before the next 
morning.

-- 
Fabien