On Thu, May 27, 2021 at 10:22 PM Julien Rouhaud <rjuju...@gmail.com> wrote:
>
> On Thu, May 27, 2021 at 10:05 PM Paul Guo <paul...@gmail.com> wrote:
> >
> > Also note that ForwardSyncRequest() does wake up the checkpointer if
> > it thinks the requests in shared memory are "too full", but does not
> > wake up when the request is actually full. This does not seem to be 
> > reasonable.
> > See below code in ForwardSyncRequest
> >
> >     /* If queue is more than half full, nudge the checkpointer to empty it 
> > */
> >     too_full = (CheckpointerShmem->num_requests >=
> >                 CheckpointerShmem->max_requests / 2);
> >
> >     /* ... but not till after we release the lock */
> >     if (too_full && ProcGlobal->checkpointerLatch)
> >         SetLatch(ProcGlobal->checkpointerLatch);
>
> Ah indeed.  Well it means that the checkpointer it woken up early
> enough to avoid reaching that point.  I'm not sure that it's actually
> possible to reach a point where the list if full and the checkpointer
> is sitting idle.

In theory this is possible (when the system is under heavy parallel write)
else we could remove that part code (CompactCheckpointerRequestQueue())
:-), though the chance is not high.

If we encounter this issue those affected queries would suddenly hang
until the next checkpointer wakeup.


Reply via email to