On Thu, Dec 10, 2020 at 12:16:02PM -0500, Stephen Frost wrote: > Attached is a patch to change it from a GUC to a compile-time #define > which is set to 0.9, with accompanying documentation updates.
All the references to checkpoint_target_completion are removed (except for bgwriter.h as per the patch). > This is because it performs a checkpoint, and the I/O > - required for the checkpoint will be spread out over a significant > - period of time, by default half your inter-checkpoint interval > - (see the configuration parameter > - <xref linkend="guc-checkpoint-completion-target"/>). This is > + required for the checkpoint will be spread out over the inter-checkpoint > + interval (see the configuration parameter > + <xref linkend="guc-checkpoint-timeout"/>). This is It may be worth mentioning that this is spread across 90% of the last checkpoint's duration instead. > - in about half the time before the next checkpoint starts. On a system > - that's very close to maximum I/O throughput during normal operation, > - you might want to increase <varname>checkpoint_completion_target</varname> > - to reduce the I/O load from checkpoints. The disadvantage of this is that > - prolonging checkpoints affects recovery time, because more WAL segments > - will need to be kept around for possible use in recovery. Although > - <varname>checkpoint_completion_target</varname> can be set as high as 1.0, > - it is best to keep it less than that (perhaps 0.9 at most) since > - checkpoints include some other activities besides writing dirty buffers. > - A setting of 1.0 is quite likely to result in checkpoints not being > - completed on time, which would result in performance loss due to > - unexpected variation in the number of WAL segments needed. > + This spreads out the I/O as much as possible to have the I/O load be > consistent > + during the checkpoint and generally throughout the operation of the > system. The > + disadvantage of this is that prolonging checkpoints affects recovery time, > + because more WAL segments will need to be kept around for possible use in > recovery. > + A user concerned about the amount of time required to recover might wish > to reduce > + <varname>checkpoint_timeout</varname>, causing checkpoints to happen more > + frequently. > </para> > > <para> Again, this makes the description of the I/O spread more general, removing the portion where half the time is used by default. Should this stuff also mention the spread value of 90% instead? > * At a checkpoint, how many WAL segments to recycle as preallocated future > * XLOG segments? Returns the highest segment that should be preallocated. > @@ -8694,7 +8687,7 @@ UpdateCheckPointDistanceEstimate(uint64 nbytes) > * CHECKPOINT_IS_SHUTDOWN: checkpoint is for database shutdown. > * CHECKPOINT_END_OF_RECOVERY: checkpoint is for end of WAL recovery. > * CHECKPOINT_IMMEDIATE: finish the checkpoint ASAP, > - * ignoring checkpoint_completion_target parameter. > + * ignoring the CheckPointCompletionTarget. s/the//? > * be a large gap between a checkpoint's redo-pointer and the checkpoint > * record itself, and we only start the restartpoint after we've seen > the > * checkpoint record. (The gap is typically up to CheckPointSegments * > - * checkpoint_completion_target where checkpoint_completion_target is > the > + * CheckPointCompletionTarget where CheckPointCompletionTarget is the > * value that was in effect when the WAL was generated). The last part of this sentence does not make sense. CheckPointCompletionTarget becomes a constant with this patch. > if (RecoveryInProgress()) > @@ -903,7 +902,7 @@ CheckpointerShmemInit(void) > * CHECKPOINT_IS_SHUTDOWN: checkpoint is for database shutdown. > * CHECKPOINT_END_OF_RECOVERY: checkpoint is for end of WAL recovery. > * CHECKPOINT_IMMEDIATE: finish the checkpoint ASAP, > - * ignoring checkpoint_completion_target parameter. > + * ignoring the CheckPointCompletionTarget. s/the//? > + * CheckPointCompletionTarget used to be exposed as a GUC named > + * checkpoint_completion_target, but there's little evidence to suggest that > + * there's actually a case for it being a different value, so it's no longer > + * exposed as a GUC to be configured. I would just remove this paragraph. -- Michael
signature.asc
Description: PGP signature